summaryrefslogtreecommitdiffstats
path: root/kernel/main.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-24 07:25:15 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-24 07:25:15 -0400
commitd74fcf75e22d9f94ecbc49772d9770b7b4999f36 (patch)
tree2637b24e7486d3dbf8c7b78cf8b3ddc4140838a7 /kernel/main.c
parente28d2411d1b1582b9fc7538a8cfaf76013c1470e (diff)
downloadopen-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/main.c')
-rw-r--r--kernel/main.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/main.c b/kernel/main.c
index 81bae08..e340b7b 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -2876,6 +2876,14 @@ MODULE_PARM_DESC(sema_wait_hold_ms, "bounded acquire-wait hold before fail-open,
module_param_named(sema_push_raw, gsp_sema_push_raw, uint, 0644);
MODULE_PARM_DESC(sema_push_raw, "r481 diagnostic: dump the decoded method stream of the first N large GR pushes (default 0 off)");
MODULE_PARM_DESC(sema_copy_dst_pin_guard, "hold device-dst copies without a pin-resolved translation (default 1)");
+/*
+ * 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) - the r606 held-chain serialization fix. 0 restores the
+ * per-page windows (pre-r609).
+ */
+module_param_named(sema_copy_dst_age_ms, gsp_sema_copy_dst_age_ms, uint, 0644);
+MODULE_PARM_DESC(sema_copy_dst_age_ms, "device-dst guard burst-ageing window after an un-pinned release, ms (r609, default 3000; 0 off)");
/*
* r384 (guest boot-corruption lottery): fill-destination guards. A large