summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_display_engine.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 23:25:00 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 23:25:00 -0500
commit770d6b4af7f44acc104c6149b9c473de1db607e7 (patch)
tree5422c6b1eb8547664c95b131edaccef446743e23 /kernel/gsp_display_engine.c
parent6ebc7cd40b09b6c922e8b87209a74da60f347739 (diff)
downloadopen-iov-770d6b4af7f44acc104c6149b9c473de1db607e7.tar.gz
open-iov-770d6b4af7f44acc104c6149b9c473de1db607e7.zip
vgsp: flip-event delivery defaults to assoc+strict (clears Flip event timeout); DDX latch reset clauses
Wall (b) 'Flip event timeout on head 0' fix (validated c171): NVKMS/kernel- callback events register hSrcResource=0, so every display UPDATE completion rode the all-events shotgun (6-7 POST_EVENT records each), the guest's status-queue read cursor fell 20-44 slots behind (rc=-11 ring-full bursts) and flip records arrived past the 3 s NvDrm window. Default the r1765 pair ON - gsp_rm_ev_assoc (hSrc==0 -> alloc-parent channel) and gsp_disp_events_strict (armed UPDATE posts only to that channel's events, no fallback) - the exact combination r1771 measured as '0 flip WARNs'. Validating cycle c171: registrations carry real sources (hEvent=0x1007a hSrc=0x1001b etc.), UPDATE posts are exact 1:1 (posts=27), WARN count 1 for the boot, serial timeouts=0 (c160 pre-fix: 34). Both stay runtime-writable. Also stage the gsp_sema_service.c candidates for wall (a) (the later-DMA 0x51 is a consequence of 'Failed to idle DMA' on a recycled channel): the served-refusal in svc_userd_ddx_reprobe now exempts a latch reset to put==0, and the put-reset latch keep extends to the DDX family (was kick-only). These clauses target c171's observed reset/junk-adopt sequence; validation pending on a roll where wall (a) is otherwise survivable.
Diffstat (limited to 'kernel/gsp_display_engine.c')
-rw-r--r--kernel/gsp_display_engine.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/kernel/gsp_display_engine.c b/kernel/gsp_display_engine.c
index c522a93..bc37a5d 100644
--- a/kernel/gsp_display_engine.c
+++ b/kernel/gsp_display_engine.c
@@ -213,17 +213,25 @@ module_param_named(disp_events, gsp_disp_events, uint, 0644);
MODULE_PARM_DESC(disp_events, "Post the channel completion event on an armed UPDATE (default 1)");
/*
- * r1765: strict display-event delivery. Default 0 keeps the legacy
- * behaviour bit-for-bit (full A/B revert); when set, an armed UPDATE posts
- * only to the events registered on that channel (no all-events fallback),
- * and unrelated completions/the 0.5 s hint skip display-channel events
- * (see gsp_disp_engine_owns_object()). Live A/B: echo 1 >
- * /sys/module/vgsp/parameters/disp_events_strict.
+ * r1765: strict display-event delivery. An armed UPDATE posts only to the
+ * events registered on that channel (no all-events fallback), and unrelated
+ * completions/the 0.5 s hint skip display-channel events (see
+ * gsp_disp_engine_owns_object()). Default was 0 (legacy) through the r1771
+ * A/B; r1771 measured: assoc=1 alone -> flip WARNs + burst storms,
+ * assoc=1 + strict=1 -> 0 flip WARNs. r1780 receipts (eng5 c160): the
+ * legacy non-strict path fell through to the all-events shotgun for every
+ * UPDATE (NVKMS events register hSrc=0), the guest's status-queue read
+ * cursor fell 20-44 slots behind, and the flip event arrived after the
+ * 3 s NvDrm flip window -> "Flip event timeout on head 0". With the r1780
+ * ev_assoc default the exact match (h_object == alloc-parent of the NVKMS
+ * flip event) succeeds, so strict mode delivers 1:1; a miss returns
+ * -ENOENT and the pump's retry re-posts. Still runtime-writable for A/B:
+ * echo 0 > /sys/module/vgsp/parameters/disp_events_strict.
*/
-static unsigned gsp_disp_events_strict = 0;
+static unsigned gsp_disp_events_strict = 1;
module_param_named(disp_events_strict, gsp_disp_events_strict, uint, 0644);
MODULE_PARM_DESC(disp_events_strict,
- "Deliver a display UPDATE completion only to events registered on that channel, no all-events fallback (default 0 = legacy; 1 = r1765 strict)");
+ "Deliver a display UPDATE completion only to events registered on that channel, no all-events fallback (default 1 = r1780; 0 = legacy)");
static unsigned long long gsp_disp_notifier_pa;
module_param_named(disp_notifier_pa, gsp_disp_notifier_pa, ullong, 0644);