summaryrefslogtreecommitdiffstats
path: root/kernel/main.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 20:01:53 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 20:01:53 -0400
commitccdc1240d5df9777503a05b247109b6136d03313 (patch)
tree74f1ea2bede53a4d7c863ede4f861bc611a038ba /kernel/main.c
parent1c596b4b30e7ecc2f525ae47b52a73b8d4de816d (diff)
downloadopen-iov-ccdc1240d5df9777503a05b247109b6136d03313.tar.gz
open-iov-ccdc1240d5df9777503a05b247109b6136d03313.zip
vgsp-sema r577: never let a foreign release VA claim a CE channel's tracking slot; event-record A/B knobs; GR-DEC dump deepened
r575 starved-release wedge (live): an unreadable UVM CE entry's rescued stale page decoded a release to a foreign VA (0x12006c004, pay=60); the rescue paths adopted it as the channel's tracking slot (last_rel_va) and every later recovery release targeted it, while the client's real pool (0x121000000) stopped at 25 - the client spun in uvm_tracker_wait for 34 (exact-slot poke delivered it and the client completed green). For CE channels only a pool-shaped release target (0x121000000..0x122000000) may become last_rel_va; a foreign rescued release is refused (witnessed, bounded) and the pool step is delivered through the exact-slot fallback / deferred-release machinery instead. The fake's read-before-write keeps the delivery monotonic even when a legit push carries multiple releases. Also: gsp_rm_ev_{seq,nlist,cl} runtime knobs for the guest-RM event drop A/B (the r576 experiment: guest consumes every POST_EVENT record and never enters nv_post_event), and the GR-DEC launch dump now covers 256 data pages (the mail VADD fill carries n_data=969). New: tools/cuda-ab/evhold.cu - deterministic CUDA event holder/wait probe (context + cudaEventSynchronize + a hold window) for the event experiments.
Diffstat (limited to 'kernel/main.c')
-rw-r--r--kernel/main.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/main.c b/kernel/main.c
index d0eb2b4..8d02e5b 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -2812,6 +2812,17 @@ MODULE_PARM_DESC(gsp_phys_gr_dec_log, "GR launch-decision dump budget per boot (
module_param_named(gsp_rm_ev_log, gsp_rm_ev_log_max, uint, 0644);
MODULE_PARM_DESC(gsp_rm_ev_log, "GSP event-post payload witness budget per boot (default 0: off)");
+/*
+ * r577 experiment knobs for the guest-RM event drop (runtime-writable so
+ * one boot can A/B). See gsp_rm_emulation.c. All default 0 = legacy.
+ */
+module_param_named(gsp_rm_ev_seq, gsp_rm_ev_seq, uint, 0644);
+MODULE_PARM_DESC(gsp_rm_ev_seq, "event records carry the status-queue sequence as RPC sequence (default 0: legacy 0)");
+module_param_named(gsp_rm_ev_nlist, gsp_rm_ev_nlist, uint, 0644);
+MODULE_PARM_DESC(gsp_rm_ev_nlist, "set bNotifyList on event records (default 0: specific-hEvent dispatch)");
+module_param_named(gsp_rm_ev_cl, gsp_rm_ev_cl, uint, 0644);
+MODULE_PARM_DESC(gsp_rm_ev_cl, "override event record hClient (default 0: the allocating client)");
+
module_param_named(gsp_sema_walk_trace, gsp_sema_walk_trace, uint, 0644);
MODULE_PARM_DESC(gsp_sema_walk_trace, "Trace GMMU walks for unresolved high-VA operands (default 0: off)");
module_param_named(gsp_sema_winfill, gsp_sema_winfill, bool, 0644);