summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.h
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-02 08:29:45 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-02 08:29:45 -0400
commitfe485080e159c983242d699f4a584659df159818 (patch)
treecdd1a46d5952036ddfb7d45ea12481328caf76b8 /kernel/gsp_phys_booter.h
parent22105e4ec738ac72d010d930222f6d8e62b4116c (diff)
downloadopen-iov-fe485080e159c983242d699f4a584659df159818.tar.gz
open-iov-fe485080e159c983242d699f4a584659df159818.zip
gsp-phys: H1 GR ladder - GR0 channel, compute object, GR sem push (default off)
New load-time gsp_phys_rmcall_engine (0=COPY0 default, 1=GR0) parameterizes the physical ladder: TSG and channel engine_type GR0, one-attempt channel alloc, TURING_COMPUTE_A engine object (class 0xc5c0, handle 0xcaf0002c), BIND engineType=1, and a GR method push (SET_OBJECT 0xc5c0 on subchannel 1 plus SET_REPORT_SEMAPHORE) submitted through the existing GPFIFO/USERD doorbell tail, polling the module semaphore. CE work-forwarding refuses cleanly while a GR ladder is active. A debugfs trigger re-runs the GR push. With the parameter at its default the ladder emits byte-identical COPY0 requests (only the state line gains engine=COPY0). Live (first GR context on the live server): every GR RPC accepted - channel variant V5, TURING_COMPUTE_A alloc status=0x0 -> hObject=0xcaf0002c, BIND status=0x0, token=0x1 - and the engine fetched the push (GPGet 0->1), but raised a GR exception instead of executing the release: exceptType=0x20, NOCAT faultingEngine="GR", intr1=0x80000000, no rpc_result errors. The failure is downstream of all RPCs; no mutating retry was made and the device released cleanly (WPR2 down, rebound, 5 locks, pstore empty, same boot). A default-engine control cycle stayed green (REAL COPY OK). Follow-up: bisect the GR alloc params, the release method D word, and the method order/context init using the drained GR fault records as the oracle.
Diffstat (limited to 'kernel/gsp_phys_booter.h')
-rw-r--r--kernel/gsp_phys_booter.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/gsp_phys_booter.h b/kernel/gsp_phys_booter.h
index 30e30db..52d9c43 100644
--- a/kernel/gsp_phys_booter.h
+++ b/kernel/gsp_phys_booter.h
@@ -407,7 +407,15 @@ int gsp_phys_boot_rm_unload(void __iomem *bar0);
* verified with a direct-map memcmp. Both directions are gated on a live
* READY claim, ladder stage >= 3 and the pinned GPA; every refusal is a
* logged no-op and no guest byte is touched unless G2H already proved
- * the translation.
+ * the translation. With gsp_phys_rmcall_engine=1 the stage-3 snapshot
+ * selects the GR0 engine for the same ladder: the TSG/channel carry
+ * engineType 1, the channel walk is a single no-retry V5 attempt, a
+ * TURING_COMPUTE_A (0xc5c0) engine object is allocated on the channel,
+ * BIND uses engineType 1 and stage 4 releases a GR semaphore instead of
+ * copying (logged as REAL GR SEM OK / REAL GR SEM FAILED); all CE
+ * forwarding paths refuse once per staging. Writing 9 re-runs one GR
+ * semaphore release on an already-built GR ladder without a full stage
+ * cycle (no RPC; requires the GR object and work-submit token).
* - "gsp-phys-guest-gpa" (write-only, mode 0200): pin the one guest RAM
* GPA ("0x<hex>", 4 KB page-aligned) that the rm-call guest directions
* may touch. One GPA per boot (a second different GPA is refused: