summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.h
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-27 16:08:54 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-27 16:08:54 -0400
commitf6e8a70fd4288d6fa11aa67a4d2a0e9a50f534dd (patch)
treedf1b2312959643b70b2d65a2c41d8859ee686a14 /kernel/gsp_sema_service.h
parent896d3e406f409ce4e80e5682ea3666de55a13158 (diff)
downloadopen-iov-f6e8a70fd4288d6fa11aa67a4d2a0e9a50f534dd.tar.gz
open-iov-f6e8a70fd4288d6fa11aa67a4d2a0e9a50f534dd.zip
vgsp: X/GL frame-pacer mirror (sema_xw_mirror) - unblocks the 10s/frame stall
r861 evidence: the X server's present path spins in a 10s-timeout wait ((EE) NVIDIA(GPU-0): WAIT (2, 8, 0x8000, <stuck 0xd4..>, <driver counter +0x70/frame>)) comparing (progress_word & 0x3ffff) << 2 against its own submitted-byte counter; the progress word (lone u32 0x140235 in an otherwise-zero guest page) never advances because the emulation does not execute the 2D method streams -> glxgears 0.09 FPS. A gdb write of the word to 0x140000 | (counter >> 2) made the wait complete in 3 ms (WAIT (0, ... <equal>, <equal>) immediately after the timeout print) and silenced all further timeouts. This adds a 3 ms kthread that mirrors the driver's counter word into the progress word; both guest PAs are injected per boot via the sema_xw_mirror parameter (0,0 stops). Demo-path tuning aid; no product logic depends on it.
Diffstat (limited to 'kernel/gsp_sema_service.h')
-rw-r--r--kernel/gsp_sema_service.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.h b/kernel/gsp_sema_service.h
index 2184826..e96ce1c 100644
--- a/kernel/gsp_sema_service.h
+++ b/kernel/gsp_sema_service.h
@@ -133,6 +133,7 @@ int gsp_sema_service_walk_probe(u64 gpu_va);
int gsp_sema_service_dump_channels(void);
int gsp_sema_service_add_map(u64 gpu_va, u64 pa, u64 len, u32 ap);
int gsp_sema_service_dump_vidmem(u64 addr, u64 len);
+int gsp_sema_service_xw_mirror(u64 cnt_pa, u64 mem_pa);
int gsp_sema_service_find_vidmem(u64 pattern, u64 max_hits);
int gsp_sema_service_pdb_discover(u64 ring_va, u64 ring_pa);
int gsp_sema_service_chan_rewind(u32 h_object);