<feed xmlns='http://www.w3.org/2005/Atom'>
<title>open-iov.git/tools/guest-diag/scrub_pin_qmp.py, branch master</title>
<subtitle>Open-IOV vGPU-IO: host-side GSP emulation for unmodified NVIDIA guest drivers
</subtitle>
<id>https://git.vgpu.io/open-iov.git/atom?h=master</id>
<link rel='self' href='https://git.vgpu.io/open-iov.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/'/>
<updated>2026-11-11T05:23:21+00:00</updated>
<entry>
<title>vgsp: all-ones scrub release for registered waits; walk-page registration; GL frame publisher (CONT.416-417)</title>
<updated>2026-11-11T05:23:21+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-11-11T05:23:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=131d44e083925f35f842114b6f7b6db546f28368'/>
<id>urn:sha1:131d44e083925f35f842114b6f7b6db546f28368</id>
<content type='text'>
- gsp_sema_service: merge a scanner registration arriving after the
  stash record instead of dropping it (a dropped registration let the
  next authoring pass write the blocking pair into the page the guest
  was polling, so the wait never ended); author the finish word
  all-ones for every registered record while the sema word stays
  put-based once real submissions were observed (CONT.416/417).
- scrub_pin_qmp (host scanner): accept an unstable-but-live wait page
  instead of skipping it, and register the walk-resolved scrubber
  channel page - first the walk summary, then the per-VAS kernel row
  (h=0xc) when the summary path fails - so the release is armed before
  the guest polls (r1762/r1764 evidence).
- guest-diag: add gl_frames, the direct-GL (GLX pbuffer) frame
  publisher; with it the stack produced the first non-black
  GPU-rendered frames (40/40, 640x480, animated) through
  pbuffer -&gt; sysmem -&gt; ivshmem -&gt; host frame_reader.
- gsp_rm_emulation: log the display-shim request words for triage.
</content>
</entry>
<entry>
<title>vgsp: USERD index/alias resolution, DDX kick-idle fix, completion-slot authorship (CONT.403-412)</title>
<updated>2026-11-10T19:40:39+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-11-10T19:40:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=72c7e2e6d4443457807d947f38ec650b3b8fb75a'/>
<id>urn:sha1:72c7e2e6d4443457807d947f38ec650b3b8fb75a</id>
<content type='text'>
Ten debugging rounds against the direct-GL channel, each fixing the wall that
blocked the previous one:

- USERD index: honour USERD_INDEX_VALUE/PAGE_VALUE from NVOS04 flags
  (X idx=3, GL idx=4) instead of always reading the block at base+0. This
  fixed the X "Failed to initialize DMA" wall.
- USERD alias: learn the BAR1-alias bias from the first ring-validated FB
  latch (wire 0x80600 -&gt; live 0x910000) and prefer alias/wire-page
  candidates before falling back to the RAM scan, which previously adopted
  another channel's control page.
- USERD latch: keep a ring-validated kick-family block across a transient
  put=0 instead of dropping it (bounded, per-channel log).
- VAS alias: DUP_OBJECT copies pdb/entries/ap/verified so hVASpace 0xbfef0001
  resolves to 0x10005 and its gpfifo VA stops re-resolving to a bogus FB PA.
- Short-kick NOTIFY: complete a kick that has no armed class-2D target
  (release + event, no write) so the client proceeds past setup.
- DDX kick-idle: slot 0 of the 0x01xxxxxx family is the pb_kickIfIdle gate and
  0xFFFF is its IDLE value; the keepalive no longer zeroes it. Removes the
  GR-STALL-stale-wedge on the X channel.
- Completion slots: register a per-channel completion on every successful
  kick and reuse it when a NOTIFY has no per-push SET_NOTIFY; prefer the
  channel's notifier page over the VA walk.
- Empty/no-op submit: author the completion even when there is no push to
  replay, so a synchronous GL submit does not wait forever.
- Scrub records: multi-record per guest, stash-first lookup, registered PA is
  authoritative against the GPU-VAS walk, scanner-only records author the
  proven 0xffffffff/0xffffffff pair.
- GL attachment: accept a draw run whose own subchannel is the engine
  subchannel the channel uses (bind is subch 0, draws on subch 3), not only
  the bind subchannel.

Measured: glxgears 427 -&gt; 526 FPS sustained with no GR stall; X binds and
renders its 2D path; 3D draw capture on the GL channel still does not occur
(see CONT.412: the GL thread blocks on the NVRM RM write lock before it
reaches any ioctl).

Adds tools/guest-diag/scrub_pin_qmp.py to register guest channel-buffer
vmap pages as scrub records from the host.
</content>
</entry>
</feed>
