summaryrefslogtreecommitdiffstats
path: root/debug/risc-v-gsp-rm-vm/sim/libos.py
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 22:46:46 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 22:46:46 -0500
commit6ebc7cd40b09b6c922e8b87209a74da60f347739 (patch)
treee364e60d4735bd1465e1f16059bb8345aa0bee01 /debug/risc-v-gsp-rm-vm/sim/libos.py
parentacb51d5389219dfe5d6415b753d849753ace98ea (diff)
downloadopen-iov-6ebc7cd40b09b6c922e8b87209a74da60f347739.tar.gz
open-iov-6ebc7cd40b09b6c922e8b87209a74da60f347739.zip
vgsp: display engine re-seeds GET on a driver ring wrap (fixes the nvidia-modeset GET-past-PUT wedge)
Root cause of the post-ScreenInit Xorg kernel-mode spin (sysrq-t: Xorg R-state inside nvKmsIoctl -> nvkms_yield, utime frozen, stime 100%): the emulated display engine (core channel c57d) held GET=0xcd8 PAST PUT=0xcc8 for 50 s. gsp_disp_run only publishes GET when the parse reaches PUT exactly (by design, per its r1630 comment), so when the guest driver wraps/resets its push ring (PUT steps backward via nvEvoMakeRoom) the stale consumed can never resync and NVKMS spins forever. When put < s->consumed (wrap/reset), re-seed consumed=0/last_put=0 and republish GET=0 so the wrapped pushes are re-parsed from the ring base; the driver's PUT is authoritative. Validated c160 (rich args): bar0 channels now read PUT==GET (core 0x590, window c57e 0xe2c) with no wedge and flips parse (UPDATE armed=1 -> FINISHED posts=32..34); X advances past the spin and served xdpyinfo once. Remaining walls (next): the push-buffer 0x51 NV_ERR_NO_MEMORY allocation lottery and 'Flip event timeout on head 0' (Xorg D in nv_drm_atomic_commit).
Diffstat (limited to 'debug/risc-v-gsp-rm-vm/sim/libos.py')
0 files changed, 0 insertions, 0 deletions