diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-23 14:17:23 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-23 14:17:23 -0400 |
| commit | 8de9f0e24d9511db9edab879fac1f8f07a3e9fbc (patch) | |
| tree | 95ecea25c53c61821defca0b84b61fb319f96560 | |
| parent | 9387fc66032d4e418c4aae80ca6ff68a801b19b8 (diff) | |
| download | open-iov-8de9f0e24d9511db9edab879fac1f8f07a3e9fbc.tar.gz open-iov-8de9f0e24d9511db9edab879fac1f8f07a3e9fbc.zip | |
vgsp-gr r553: the dstpend launch-defer window is absolute, not sliding
r551 soak evidence (victory_strided, same boot as a green battery): the
client's init copies keep failing -ENOENT and are retried by the pump;
every retry re-noted its destination page and re-freshened the r541
dstpend record, so svc_gr_dstpend_overlap() never lapsed and the launch
guard deferred the launch forever: "GR busy-defer timeout -> hold
8000 ms" every ~4 s for 427 s, zero GR LAUNCH submitted, client at 100%
CPU.
Stamp a page's record once per failure episode: an existing record inside
its 10 s window is not re-stamped (the window stays absolute from the first
unexecuted write); an expired record is re-stamped for a genuinely new
episode. The launch then forwards best-effort at the bound exactly as the
guard's own comment promises ("bounded by the same busy-defer + gr_hold
machinery ... it can never hang the launch").
| -rw-r--r-- | kernel/gsp_sema_service.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 52819da..91f1df9 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -7921,6 +7921,22 @@ static void svc_dstpend_note(u64 va) return; for (i = 0; i < svc_dstpend_n; i++) { if (svc_dstpend[i].va_page == page) { + /* + * r553: the window is ABSOLUTE from the first failed + * attempt for this page, never re-freshened by the + * retries. The retried decode of a copy that cannot + * resolve re-notes its destination on every pass; with + * a sliding stamp the record never expired and the r541 + * launch guard deferred the launch forever - r551 soak: + * victory_strided repeated "GR busy-defer timeout -> + * hold 8000 ms" every ~4 s for 427 s with the launch + * never forwarded (the copies' -ENOENT retries kept the + * note fresh). A record older than the window is + * refreshed only when a NEW failure episode starts. + */ + if (time_before(jiffies, svc_dstpend[i].since + + msecs_to_jiffies(SVC_DSTPEND_MS))) + return; svc_dstpend[i].since = jiffies; return; } |
