From e2560a545d717c7c92086b78e131de96345b6c07 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Mon, 2 Nov 2026 04:03:42 -0500 Subject: vgsp: CONT-111 - sema_gl_wit_shown (uint default 4) replaces hardcoded 4-page GUEST-WIT shown budget ('if (shown < gsp_phys_gr_wit_shown)') so a store-rich launch dumps the full changed va/pa list; recipes carry 1024 - TASK 1 ANSWERED (surface): xwd/window path reads the RT va=0x120400000 pitch 5120 (proof via server GetImage ops sema-op2d h=0x1000013 dst=0x120350000 src=0x120658000 spitch=5120 so=1/480 => src base 0x120658000-480*5120=0x120400000); FIRST ENGINE-CHANGED RT PAGES of the campaign r1385: output retirement wait 2/900 pages changed (settled) + bounce copy-out 2 pages written back 2 changed by engine + OUT-ALIAS-WIT va=0x120705000 partner_va=0x120700000; but FB shadow at those pages reads same uniform weave invisible; GATE1 BLACK+STATIC: xwd root nz 0, shim frames=217 mean=0.0283 diff 0, FB shadow static while glxgears 445 FPS (8MB diff over 10s, md5 e85173d8 identical 5/5) - new /proc/kcore reader kcoredump.py/kscan*.py (region nv_vgpu_bar_init+0x15a SVC_VIDMEM base 0x120200000); HAZARD recorded: 64KB host probes into unverified regions panicked guest kernel (anon_vma), regions restored, SINGLE-PAGE PROBES ONLY - next: give changed pages priority in copy-out witness (OUT-PAGE-WIT with own budget; 12-line budget exhausted by OUT-UNCH flood so va->hpa of engine-changed pages never printed); then diff FB shadow via kcore reader across that copy-out to capture the engine's exact pixels; if weave then DRAW (0xd78) still isn't rasterizing and A/B moves to an IR-word patch knob on slot34's emitted BEGIN/SET_VERTEX_ARRAY_START/DRAW_VERTEX_ARRAY/END - SESSION 153 r1382-r1385 --- kernel/gsp_phys_booter.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c index 43ab00f..bcb0dd0 100644 --- a/kernel/gsp_phys_booter.c +++ b/kernel/gsp_phys_booter.c @@ -23395,6 +23395,17 @@ static u64 gsp_phys_gr_wit_first8[GSP_PHYS_GR_WIT_MAX]; static u32 gsp_phys_gr_wit_n; static u32 gsp_phys_gr_wit_rep_log; +/* + * CONT-111: the changed-page line budget was a hardcoded 4; a store-rich + * launch (r1378 reached 305/903 relocated-operand pages) needs the whole + * list to find the render target among the operand pages. 0 keeps the + * summary line only. + */ +static u32 gsp_phys_gr_wit_shown = 4; +module_param_named(sema_gl_wit_shown, gsp_phys_gr_wit_shown, uint, 0644); +MODULE_PARM_DESC(sema_gl_wit_shown, + "Max GUEST-WIT changed va/pa lines per report (default 4; CONT-111 RT hunt)"); + static void gsp_phys_gr_wit_reset(void) { gsp_phys_gr_wit_n = 0; @@ -23471,7 +23482,7 @@ static u32 gsp_phys_gr_wit_report(const char *where) * vertex/float data means the guest CPU rewrote its * buffer while the engine ran. */ - if (shown < 4) { + if (shown < gsp_phys_gr_wit_shown) { shown++; pr_info("vgsp-gr: GUEST-WIT %s changed va=0x%llx pa=0x%llx pre=0x%016llx post=0x%016llx\n", where, -- cgit v1.2.3