<feed xmlns='http://www.w3.org/2005/Atom'>
<title>open-iov.git/kernel/gsp_sema_service.c, branch m31</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=m31</id>
<link rel='self' href='https://git.vgpu.io/open-iov.git/atom?h=m31'/>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/'/>
<updated>2026-10-06T18:23:29+00:00</updated>
<entry>
<title>vgsp: TSG-sibling mode 30, UVM-stall Patch C, QMD shadow-window ensure + launch diagnostics</title>
<updated>2026-10-06T18:23:29+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-06T18:23:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=039daee13c5bac50919eff1ca26977ac49e37b06'/>
<id>urn:sha1:039daee13c5bac50919eff1ca26977ac49e37b06</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vgsp: PRIV VA-only booking bit + verify the exact slot before consuming unreadable CE entries</title>
<updated>2026-10-06T16:15:50+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-06T16:15:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=a1f9d3f7b77e954a1a9ee36c7f787fe2083b544a'/>
<id>urn:sha1:a1f9d3f7b77e954a1a9ee36c7f787fe2083b544a</id>
<content type='text'>
- fwclient mask bit 15 (0x8000): book the PRIV_ACCESS_MAP VA (the FWCLIENT
  entry form is init-only; the golden9 form carries the VA at VA_GOLDEN9_PRIV).
  Accepted on V6 (status 0), completing the maximal promoted context.
- gsp_sema_service: svc_entry_want_reached() verifies the exact tracking slot
  against entry_want before the three unreadable-CE consume shortcuts treat the
  entry as delivered; when the slot lags, re-seed the expectation and let
  svc_fake_release author or queue the exact slot (UVM registration stall pair
  with the pool-VA verified-resolver queue).
</content>
</entry>
<entry>
<title>vgsp: golden-exec shape bisection + fwclient per-entry promotion + pool-VA stall fix</title>
<updated>2026-10-06T15:57:33+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-06T15:57:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=3f892b2924c0bdd15aaa04899b879601bd263981'/>
<id>urn:sha1:3f892b2924c0bdd15aaa04899b879601bd263981</id>
<content type='text'>
- Mode 28 golden execution lane behind gsp_phys_rmcall_gr_promote=28 with a
  shape bitmask (gsp_phys_rmcall_golden_exec_shape: ring / entries=8 / sysmem
  USERD / USERD size / hObjectBuffer=VAS / skip replay TURING_A) and a USERD
  control-offset helper. Finding: the RM-managed golden channel hangs any GR
  object construct (-110, no assert) as soon as client submission wiring
  (ring or sysmem USERD) is attached, so only the captured server-owned shape
  constructs; the machinery is kept for future wiring ideas.
- fwclient mask bit 11 (0x800): send each non-MAIN FWCLIENT promote entry as
  its own one-entry control and continue past refusals. V6 acceptance matrix:
  PM, PATCH, PRIV_ACCESS_MAP, UNRESTRICTED_PRIV_ACCESS_MAP accepted,
  FECS_EVENT refused 0x1f.
- fwclient mask bit 12 (0x1000): golden9 VA-only global bookings (BUNDLE_CB,
  PAGEPOOL, ATTRIBUTE_CB, RTV_CB_GLOBAL) accepted on V6; bits 13/14
  (0x2000/0x4000): FECS PA-only (refused 0x1f) and FECS VA-only (accepted).
- gsp_phys_rmcall_srv_main_ignore: ignore a server-reported MAIN in the
  srv-ctx commit and force the client INITIALIZE_CTX + VA-only fallback.
- gsp_sema_service: pool semaphores never fall back to the learned map; queue
  the absolute release via svc_pending_add until svc_pool_pa_resolve
  succeeds, and judge pool slots through the verified resolver in
  svc_apply_pending and the release decode (UVM registration stall fix).
</content>
</entry>
<entry>
<title>vgsp: verbatim replay of the captured GR launch prelude+window</title>
<updated>2026-10-06T11:48:07+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-06T11:48:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=896bd9f744cadfd8af2dd03c79ac31114fb37dba'/>
<id>urn:sha1:896bd9f744cadfd8af2dd03c79ac31114fb37dba</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vgsp: dump the full captured guest push stream for method decode</title>
<updated>2026-10-06T02:35:17+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-06T02:35:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=86fe5194527810e15ddd3cf305b9fdf4b044e286'/>
<id>urn:sha1:86fe5194527810e15ddd3cf305b9fdf4b044e286</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vgsp: point inline-QMD launch at the guest QMD buffer + GR post-mortem logging</title>
<updated>2026-10-06T01:46:02+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-06T01:46:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=66e6d16680d77a58fa235d837ba897879e8ae1f9'/>
<id>urn:sha1:66e6d16680d77a58fa235d837ba897879e8ae1f9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vgsp: GR forwarding static-review fixes (GR/CE slot bit, release VA-&gt;PA, shadow refusal)</title>
<updated>2026-10-05T18:01:30+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-05T18:01:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=e2fbb2756cca242f8ee14e1106d43b7d18195dd1'/>
<id>urn:sha1:e2fbb2756cca242f8ee14e1106d43b7d18195dd1</id>
<content type='text'>
Five defects found in a static review of the default-off GR forwarding path
(no hardware test possible; GPU wedged):

- clear the shared request slot's GR mode bit when a CE request is filled,
  so a prior GR request can never make a later CE push run the GR work
  function with stale fields;
- resolve the QMD release0 guest VA to a guest PA on the service thread
  (counter pin/derive, else the trusted resolver) and only convert PA-&gt;HPA
  in the work item; the previous code fed the VA to the PA-based translator
  and would write release0 into an unrelated guest page;
- take the refusal path (goto gr_page_unmapped) on every Tier-2 shadow
  failure instead of continuing to submit a half-built method stream;
- consume the QMD run on replay passes when the GR forward is enabled so
  replayed QMD words are never reinterpreted as CE method headers;
- only queue a captured GR candidate against the channel that captured it.

Build clean (make -C kernel, W=1 only pre-existing warnings).
</content>
</entry>
<entry>
<title>vgsp: guest GR forwarding backend and capture (gsp_phys_gr_forward, default off)</title>
<updated>2026-10-05T17:40:24+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-05T17:06:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=d3f061966bb9e23fdba7f6cc0aa231acdf31f36e'/>
<id>urn:sha1:d3f061966bb9e23fdba7f6cc0aa231acdf31f36e</id>
<content type='text'>
Add a default-off guest GR (compute) forwarding path so a guest CUDA
launch submitted on its GR channel can be executed by the physical GR
engine on the ladder channel, with fail-closed fallback to the host CUDA
bridge and the unchanged software release path.

- New module parameter gsp_phys_gr_forward (default 0) and accessor.
- New GR execution gate: boot_stage.rmcall_gr_exec_ok, latched only after
  a real GR submission logs REAL GR SEM OK; the backend refuses while it
  is unset.
- Sema capture: a completed 64-word inline QMD on a trusted, non-replay
  GR decode becomes an svc_gr_cand (push identity, decoded release0,
  parameter/program/pointer fields, up to 8 captured inline-write
  records); the CUDA bridge stays authoritative while the parameter is
  off and is reached in order forward -&gt; bridge -&gt; software release.
- Backend: gsp_phys_backend_guest_gr_submit() maps pages at their own
  guest VAs through fresh Tier-1 small-PT pages/PDE installs or relocates
  inline-captured pages to ladder shadow pages (Tier 2), builds
  SET_OBJECT + the inline-QMD method run + REPORT_SEMAPHORE on the
  compute subchannel, reuses the shared GPFIFO/USERD/doorbell publish
  tail (extracted from the CE submit path, CE bytes unchanged) and polls
  the QMD release and/or module semaphore, draining the epoch-gated
  fault queue on timeout.
- Sema wiring: GR requests reuse the INFLIGHT/hold/deferral machinery so
  the guest channel release applies only on the submit's success/failure
  edge; hold shims preserve the channel engine type.
- Counters and a work_gr state line plus a stats accessor.
- Bounds are fixed: 16 pages, 8 inline records, 64 QMD words; every
  pointer/size checked, pool exhaustion and stale mappings fail closed.
- New ABI layouts pinned with static_asserts.

Compile-only change: no device test performed.

(cherry picked from commit ae507e6f241c7e3498728f9d1ffc2d41ede5cd64)
</content>
</entry>
<entry>
<title>vgsp: hold every unreadable CE entry for the grace; delete the silent pre-rescue fake</title>
<updated>2026-10-05T11:00:45+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-05T11:00:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=c36ecc19cf19d760c070db6bdd29227b0fadc12d'/>
<id>urn:sha1:c36ecc19cf19d760c070db6bdd29227b0fadc12d</id>
<content type='text'>
An unreadable CE entry whose channel already had a decoded release VA was faked immediately and consumed with no log line, before any rescue attempt. A later pin-batch rewind then executed the skipped copy against a staging buffer the client had since refilled - the deterministic vadd input shift seen in runs 94/122/151/173b/215b, each with a silent pre-rescue fake.

Now every unreadable CE entry with an expected payload is held for the bounded grace and the rescue is retried on each pass, so a translation that is still coming wins and the work runs before the release. Only an entry whose release was already delivered (the channel moved past entry_want) is consumed at once; the post-rescue fake remains the bounded, visible escape. The CE grace default moves 15000 -&gt; 25000 ms (a translation arrived ~17 s after first examination in 215b).

Under live campaign 229-236 (module 97eba5b7; green so far).
</content>
</entry>
<entry>
<title>vgsp: widen the CE pending-entry grace to 15 s</title>
<updated>2026-10-05T04:12:56+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-05T04:12:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=a9d776627f5057fd11c8d0a94bbfcca2358fe507'/>
<id>urn:sha1:a9d776627f5057fd11c8d0a94bbfcca2358fe507</id>
<content type='text'>
A consumed entry's work is never run; if its release lands via the
fallback before the entry's copies have executed, the client refills the
staging slot the copies then read (observed as the deterministic
one-chunk vadd input shift). Keep untranslatable CE entries pending
longer so their copies run before any release reaches the client.
8-cycle pilot (141-148): zero corruption; a red-fingerprint cycle
(held=1165, ring_auto=6) healed to ring_auto=26 with faked=0 and the
exact checksum, where the 8 s window recorded 1 corruption in 36.
</content>
</entry>
</feed>
