diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-24 07:25:15 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-24 07:25:15 -0400 |
| commit | d74fcf75e22d9f94ecbc49772d9770b7b4999f36 (patch) | |
| tree | 2637b24e7486d3dbf8c7b78cf8b3ddc4140838a7 /kernel/gsp_sema_service.h | |
| parent | e28d2411d1b1582b9fc7538a8cfaf76013c1470e (diff) | |
| download | open-iov-d74fcf75e22d9f94ecbc49772d9770b7b4999f36.tar.gz open-iov-d74fcf75e22d9f94ecbc49772d9770b7b4999f36.zip | |
vgsp-sema r609: age the device-dst guard per channel burst - the r606 held-chain serialization
The m169 device-dst first-touch window is per PAGE, but the risk it covers
is per client table build. The driver's H2D relocation burst on the eng==0
copy channel writes N distinct first-write pages back to back; because the
pump holds the first held entry and the rest of the chain decodes only after
it drains, each page paid its own 3 s window, serialized (r606 red draw:
hold idx=90 362167.7->362170.8, idx=92 362177.7->362182.9, the b H2D entry
ran 362182.882, 326 ms AFTER the launch forward -> VADD bad=32735
csum=8139264, c = a + 0).
Every observed release logs 'without a pin': the pin the window waits for
never arrives for this class. After ONE un-pinned release on a channel, age
it (gsp_sema_copy_dst_age_ms, default 3000): further first-write device-dst
pages of that channel inside the window run immediately with the walk
translation - the exact translation the expired guard would have used
anyway. The first page of every burst still pays the full window; only the
N x window serialization is removed (~20 s of chain -> one window).
Keyed by h_object like every channel table and cleared by the session
flush (svc_dst_guard_reset; also clears the per-page slots, which are keyed
by VA alone and must not pre-age the next client's first touch - the r604
lifetime lesson). 0 restores per-page windows (pre-r609).
Diffstat (limited to 'kernel/gsp_sema_service.h')
| -rw-r--r-- | kernel/gsp_sema_service.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.h b/kernel/gsp_sema_service.h index 8664954..f891de1 100644 --- a/kernel/gsp_sema_service.h +++ b/kernel/gsp_sema_service.h @@ -329,6 +329,10 @@ extern bool gsp_sema_pool_hold_fresh; * walk/RAM scan until a pin confirms (default on). */ extern bool gsp_sema_copy_dst_pin_guard; +/* r609: after a device-dst guard window expires WITHOUT a pin, skip the + * window for further first-write device-dst pages of the same channel for + * this long (ms). 0 restores the per-page windows (pre-r609). */ +extern unsigned gsp_sema_copy_dst_age_ms; extern bool gsp_sema_wait_gate; /* r401: bounded acquire-wait hold (fail-open) in ms; must exceed the * emulated launch completion latency for copy-after-launch ordering. */ |
