summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_gpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_gpu.h')
-rw-r--r--kernel/gsp_phys_gpu.h40
1 files changed, 31 insertions, 9 deletions
diff --git a/kernel/gsp_phys_gpu.h b/kernel/gsp_phys_gpu.h
index 36532a5..c8beb1d 100644
--- a/kernel/gsp_phys_gpu.h
+++ b/kernel/gsp_phys_gpu.h
@@ -13,10 +13,17 @@ void gsp_phys_gpu_release(void);
void __iomem *gsp_phys_gpu_bar0(void);
/*
- * Backend session state (P0 skeleton; one physical GPU, one live claim).
- * OFF until a start claims the device; READY is the only state in which live
- * RPC forwarding is legal. The refcount and owner flag decide who releases:
- * the load-time module-owned claim is joined, never released, by a stop().
+ * Read by the backend session to enforce the mdev-owned start gate; the
+ * gsp_phys_gpu module parameter itself is owned by main.c.
+ */
+bool gsp_phys_gpu_enabled(void);
+
+/*
+ * Backend session state (P0 skeleton + P1 lifecycle; one physical GPU, one
+ * live claim). OFF until a start claims the device; READY is the only state
+ * in which live RPC forwarding is legal. The refcount and owner flag decide
+ * who releases: the load-time module-owned claim is joined, never released,
+ * by a stop(); an mdev-owned claim is released by the last stop().
*/
enum gsp_phys_backend_state {
GSP_PHYS_BACKEND_OFF = 0,
@@ -28,15 +35,30 @@ enum gsp_phys_backend_state {
/*
* Refcounted session start/stop around gsp_phys_gpu_claim()/_release(); safe
- * (and idempotent) in any state. The generation counter is bumped when the
- * session leaves READY; a forward that captured the previous value re-checks
- * it under gsp_phys_rm_lock and refuses, so a stop cannot race an in-flight
- * forward. The lock itself stays private to gsp_phys_gpu.c; the state and
- * generation accessors are lock-free reads for use from the RPC path.
+ * (and idempotent) in any state. gsp_phys_backend_start() never blocks on the
+ * claim/boot: an mdev-owned start schedules a work item and returns, and a
+ * failed claim leaves the session OFF (fail-open: the caller keeps using the
+ * emulation path). The generation counter is bumped when the session leaves
+ * READY; a forward that captured the previous value re-checks it under
+ * gsp_phys_rm_lock and refuses, so a stop cannot race an in-flight forward.
+ * The lock itself stays private to gsp_phys_gpu.c; the state and generation
+ * accessors are lock-free reads for use from the RPC path.
+ *
+ * Module exit uses the two-phase form so the ยง1.4 ordering can be kept:
+ * begin_stop() gates the session (STOPPING + generation bump) before the
+ * caller drains the emulation threads, then end_stop() runs the release.
*/
int gsp_phys_backend_start(void);
void gsp_phys_backend_stop(void);
+void gsp_phys_backend_begin_stop(void);
+void gsp_phys_backend_end_stop(void);
int gsp_phys_backend_state(void);
u32 gsp_phys_backend_generation(void);
+/*
+ * True when the gsp_phys_mdev_owned module parameter is set (default 0:
+ * load-time module-owned claim/boot, today's behavior).
+ */
+bool gsp_phys_mdev_owned_enabled(void);
+
#endif /* GSP_PHYS_GPU_H */