From 9b91798df5a59d628d627c8596a2295be0a47eaa Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Thu, 12 Nov 2026 21:39:29 -0500 Subject: vgsp: X-DMA wall witness for 0x1000013; add params-r1624.txt (rich bring-up set) One rate-limited (0.5 s) sema-xchan line per pass for the X DDX channel: rrc/uok/upa/uas/put/get/last/ring_pa/entry0 - names the decode-gate state independently of the shared userdp budget. Diagnostic only, no behaviour change. params-r1624.txt is the rich r1624 insmod set as a durable tools/guest-diag file (INSMOD_PARAMS=tools/guest-diag/params-r1624.txt). Context (c130/c131 with the rich set): the DDX DMA test now PASSES on most attempts (tracker release decoded + delivered); the remaining gap is the USERD speculative-latch lifetime (a latch that delivered the test kick is REJECTED 15 s later with no PUT advance; the next generation then adopts a stale VRAM block, put=2 get=0, and the retry window closes) plus a later 'Push buffer object allocation failed: 0x51 NV_ERR_NO_MEMORY' (emulated heap accounting; 1872 MiB free). --- kernel/gsp_sema_service.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'kernel') diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 948285b..82dceaf 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -44449,6 +44449,40 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) ch->h_object >= 0xbfef0000u && ch->h_object <= 0xbfef00ffu) svc_pub_advance(ch); + /* + * X-DMA wall witness (2026-11-12): the X DDX channel + * (0x1000013) either stalls before its entries are decoded + * (USERD unresolved) or advances a put the pump never sees. + * One rate-limited line per half second names the state the + * pass decides on, independent of the shared userdp budget. + */ + if (gsp_sema_dbg && ch->h_object == 0x1000013u) { + static unsigned long xchan_at; + + if (time_after(jiffies, xchan_at)) { + u32 xe0 = 0, xe1 = 0; + u64 xeva = 0, xelen = 0; + u8 xre[8]; + + xchan_at = jiffies + HZ / 2; + if (ring_pa && !rrc && + !svc_read_ap(vgpu, ring_pa, ring_ap, + xre, sizeof(xre))) { + memcpy(&xe0, xre, 4); + memcpy(&xe1, xre + 4, 4); + xeva = ((u64)(xe1 & 0xff) << 32) | + (u64)(xe0 & 0xfffffffc); + xelen = ((u64)((xe1 >> 10) & + 0x1fffffu)) << 2; + } + pr_info("sema-xchan: h=0x%x rrc=%d uok=%u upa=0x%llx uas=%d put=%u get=%u last=%u ring_pa=0x%llx rap=%d e0va=0x%llx elen=%llu\n", + ch->h_object, rrc, + ch->userd_ok ? 1u : 0u, + ch->userd_pa, ch->userd_as, put, get, + (u32)ch->last_get, ring_pa, ring_ap, + xeva, xelen); + } + } if (!ch->userd_ok) { if (svc_chan_userd(vgpu, ch, rrc ? 0 : ring_pa, rrc ? -1 : ring_ap, &put, &get, -- cgit v1.2.3