summaryrefslogtreecommitdiffstats
path: root/STATE-CURRENT.md
diff options
context:
space:
mode:
Diffstat (limited to 'STATE-CURRENT.md')
-rw-r--r--STATE-CURRENT.md40
1 files changed, 36 insertions, 4 deletions
diff --git a/STATE-CURRENT.md b/STATE-CURRENT.md
index 5a68054..c3c307d 100644
--- a/STATE-CURRENT.md
+++ b/STATE-CURRENT.md
@@ -69,7 +69,7 @@ meant to execute on the physical GPU.
and destination equal to source. Every cycle released the device cleanly
with no reboot; the next rung is wiring the live physical session into the
guest-facing mdev/vfio path
- ([`docs/03-architecture/11-physical-backend-guest-wiring.md`](docs/03-architecture/11-physical-backend-guest-wiring.md)). The guest-wiring rung then advanced: an inert backend-session API was added, and the mediated-device-owned lifecycle (P1, see the frontier section) was implemented and exercised - deferring the physical claim/boot to the first device create, releasing it on the last remove, with fail-open behaviour. The first P1 acceptance cycle exposed two defects - an asynchronous boot marked READY after a failed FWSEC boot, and the P1 release path freezing the host (see the frontier section). The G0 fix bundle (default-latched D0/D3cold locks, post-rebind readiness gate, pre-claim D0 settle, READY gated on a proven boot, pre-kick staging readback) is implemented, built, smoke-tested and now **validated live**: two module-owned supervised cycles (2026-10-02 ~00:57-00:58) were 2/2 green through claim, FWSEC, booter, RISC-V active, init-done (`0x1001`, `rpc_result=0` in ~955 ms) and a latched release with WPR2 down, exactly 5 `power domain left LOCKED` lines, 0 in-window rail cycles, host alive and pstore empty. The retested P1 mdev-owned path - the exact path that hard-froze on 2026-10-01 - now fails open safely (the READY gate releases the claim when no live GSP-RM session exists; no freeze), while the async FWSEC boot defect (`staging not visible before kick` -> `FWSEC/FRTS execution failed: -5`) remains open, quarantined off the critical path; guest wiring proceeds on the module-owned live session. The bundle was later committed (`56766b2`). Guest-wiring P2 (static-config identity overlay) has since landed and verified live (2026-10-02 01:20-01:45): with `gsp_phys_static_live=1` the guest's `nvidia-smi -q` Product Name comes from the live session (`NVIDIA GeForce RTX 2080 Super with Max-Q Design`) versus the emulated `NVIDIA GeForce RTX 2080 SUPER` with it off (A/B; overlay applied 4x/0), while the guest smoke stays GREEN `ALL OK` 64/64; one overlay-OFF full run hit a pre-existing emulated-path flake, watched. P3 (read-only control forwarding) has since landed and verified live (2026-10-02 ~01:33-01:45): the `gsp_phys_ctrl_forward` whitelist served 22 controls live with 2 fallbacks and 0 timeouts while the guest smoke stayed GREEN `ALL OK` 64/64; **P5 wave 1 (guest-submission shadow execution) has since landed and verified live** (2026-10-02 ~02:00-02:20): with `gsp_phys_work_forward=1` the sema pump shadow-executes eligible CE pushes on the physical engine through a dedicated ordered workqueue - 514 real 4 KiB copies during a GREEN guest smoke (`ALL OK` 64/64), 194 requests coalesced/dropped while one was in flight, 0 refusals, 0 timeouts - while the software release path stays authoritative and no guest memory or guest VA is touched; P6 has since proven guest-page DMA live (P6a, 2026-10-02: the physical copy engine copied 4 KiB to and from a real guest RAM page with the semaphore released while the guest smoke stayed GREEN `ALL OK` 64/64 and release stayed latched with no reboot), so forwarding guest submissions (page-directory shadowing, real guest channels, push forwarding) is the next end-to-end rung; P5 wave 2 (hardware-primary release relay) is optional, and P4 (alloc/free handle adoption) remains deliberately deferred. |
+ ([`docs/03-architecture/11-physical-backend-guest-wiring.md`](docs/03-architecture/11-physical-backend-guest-wiring.md)). The guest-wiring rung then advanced: an inert backend-session API was added, and the mediated-device-owned lifecycle (P1, see the frontier section) was implemented and exercised - deferring the physical claim/boot to the first device create, releasing it on the last remove, with fail-open behaviour. The first P1 acceptance cycle exposed two defects - an asynchronous boot marked READY after a failed FWSEC boot, and the P1 release path freezing the host (see the frontier section). The G0 fix bundle (default-latched D0/D3cold locks, post-rebind readiness gate, pre-claim D0 settle, READY gated on a proven boot, pre-kick staging readback) is implemented, built, smoke-tested and now **validated live**: two module-owned supervised cycles (2026-10-02 ~00:57-00:58) were 2/2 green through claim, FWSEC, booter, RISC-V active, init-done (`0x1001`, `rpc_result=0` in ~955 ms) and a latched release with WPR2 down, exactly 5 `power domain left LOCKED` lines, 0 in-window rail cycles, host alive and pstore empty. The retested P1 mdev-owned path - the exact path that hard-froze on 2026-10-01 - now fails open safely (the READY gate releases the claim when no live GSP-RM session exists; no freeze), while the async FWSEC boot defect (`staging not visible before kick` -> `FWSEC/FRTS execution failed: -5`) remains open, quarantined off the critical path; guest wiring proceeds on the module-owned live session. The bundle was later committed (`56766b2`). Guest-wiring P2 (static-config identity overlay) has since landed and verified live (2026-10-02 01:20-01:45): with `gsp_phys_static_live=1` the guest's `nvidia-smi -q` Product Name comes from the live session (`NVIDIA GeForce RTX 2080 Super with Max-Q Design`) versus the emulated `NVIDIA GeForce RTX 2080 SUPER` with it off (A/B; overlay applied 4x/0), while the guest smoke stays GREEN `ALL OK` 64/64; one overlay-OFF full run hit a pre-existing emulated-path flake, watched. P3 (read-only control forwarding) has since landed and verified live (2026-10-02 ~01:33-01:45): the `gsp_phys_ctrl_forward` whitelist served 22 controls live with 2 fallbacks and 0 timeouts while the guest smoke stayed GREEN `ALL OK` 64/64; **P5 wave 1 (guest-submission shadow execution) has since landed and verified live** (2026-10-02 ~02:00-02:20): with `gsp_phys_work_forward=1` the sema pump shadow-executes eligible CE pushes on the physical engine through a dedicated ordered workqueue - 514 real 4 KiB copies during a GREEN guest smoke (`ALL OK` 64/64), 194 requests coalesced/dropped while one was in flight, 0 refusals, 0 timeouts - while the software release path stays authoritative and no guest memory or guest VA is touched; P6 has since proven guest-page DMA live (P6a, 2026-10-02: the physical copy engine copied 4 KiB to and from a real guest RAM page with the semaphore released while the guest smoke stayed GREEN `ALL OK` 64/64 and release stayed latched with no reboot) and then **P6b wave 1** (2026-10-02, run p6run13): with `gsp_phys_work_forward=1 gsp_phys_guest_mem=1` the sema service resolved real guest CE-copy operands to host physical addresses and executed them on the physical copy engine through module-built GMMU scratch slots (`req=42 ok=42 verify_ok=42 verify_fail=0`, 503 ladder shadow copies also ran) while the software release path stayed authoritative - guest CE copies now execute on hardware with host-side data consistency verified, the guest smoke stayed GREEN `ALL OK` 64/64 and release stayed latched with no reboot. Real page-directory shadowing and guest channels (P6c) remain, **P6b wave 2** (hardware-primary release relay) is next, and P4 (alloc/free handle adoption) remains deliberately deferred. |
| Graphics (3D), video | ❌ |
| Faults, multi-version, Windows, migration, multi-tenancy, performance | ❌ |
@@ -81,7 +81,37 @@ chain succeeds.
## Right now (frontier)
-- **Guest-page DMA proven on the physical engine (P6a, 2026-10-02).** The
+- **Guest CE copies run on the physical engine with verified data (P6b wave 1,
+ 2026-10-02, run p6run13).** With `gsp_phys_work_forward=1
+ gsp_phys_guest_mem=1` during a full CUDA driver-API smoke, the sema service
+ captures the first eligible copy per push from the software path's own
+ resolved operands - both real push shapes (a physical emulated-VRAM
+ destination plus a virtual source, and vice versa; a mix of sysmem guest RAM
+ and emulated-VRAM shadow pages) - resolves each side to a host physical
+ address (guest RAM through the QEMU shared-file page cache; shadow pages
+ through the vmalloc-to-physical mapping of the emulated VRAM shadow), maps
+ both sides onto fresh module-built GMMU scratch slots and submits a real
+ copy-engine copy on the module-owned channel. Any miss falls back to the
+ existing ladder-buffer shadow copy; the software pump stays authoritative.
+ **PTE fetch-line rule (learned live):** the engine caches PTE fetches at
+ 128-byte granularity and there is no invalidate path, so a scratch copy
+ pair consumes one whole 128-byte line (16 PTEs) from a pool of 16 zeroed
+ page-table pages built before the first engine access: capacity 512 pairs
+ per boot, and a line is never reused within a boot. **Live:** `req=42
+ ok=42 verify_ok=42 verify_fail=0 fallback=0 resolve_fail=0
+ pool_exhausted=0 refused=0` (503 ladder shadow copies also ran); the guest
+ smoke stayed green (`matched=64/64`, `ALL OK`), the P6a guest-page read/write
+ proof and the informational PTE self-test stayed green, and release stayed
+ latched (distribution driver rebound, protected region down, exactly 5
+ power-domain locks held, 0 rail cycles, no reboot). Shadow-mode limits: the
+ software copy already applied the same bytes, so the hard evidence is
+ acceptance of the translated-HPA submission, the semaphore release and the
+ host-side data-consistency verification (`verify_ok`); a late hardware write
+ can theoretically race guest reuse within the submit window. Module sha256
+ `9d444908...`. **Next: P6b wave 2** (hardware-primary release relay), then
+ **P6c** (real guest page tables/channels).
+- **Guest-page DMA proven on the physical engine (P6a, 2026-10-02; superseded
+ by the P6b wave-1 result above).** The
IOMMU/DMA reachability known-unknown is closed on the reference host: the
physical GPU's IOMMU group is an identity domain (all-RAM identity) and the
mediated device registers as an emulated-IOMMU VFIO device, so its type-1
@@ -599,8 +629,10 @@ Work execution (host service vs client synchronization):
[done] real work executes on the physical GPU: the host RM client's copy
engine block runs on the physical CE - 4 KiB copied, semaphore
released, destination equals source
- [not yet] guest-submitted work relayed to the physical engine (next rung:
- wire the physical session into the mdev/vfio path)
+ [partial] guest-submitted work relayed to the physical engine: eligible guest
+ CE copies execute on hardware through module-built scratch mappings
+ with host-side data verification (shadow mode; the software release
+ stays authoritative); real guest page tables/channels (P6c) remain
[not yet] correct results (vectorAdd)
```