summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_gpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_gpu.c')
-rw-r--r--kernel/gsp_phys_gpu.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/kernel/gsp_phys_gpu.c b/kernel/gsp_phys_gpu.c
index 974100a..f323c6c 100644
--- a/kernel/gsp_phys_gpu.c
+++ b/kernel/gsp_phys_gpu.c
@@ -704,6 +704,28 @@ int gsp_phys_rmcall_gr_qmdwin_value(void)
EXPORT_SYMBOL_GPL(gsp_phys_rmcall_gr_qmdwin_value);
/*
+ * m64 forced module-semaphore release (gsp_phys_rmcall_gr_rel_mod; default 0).
+ * When set, a forwarded GR launch ignores the resolved guest release page and
+ * points QMD release0 at the module window-0 semaphore VA
+ * (GSP_PHYS_RMCALL_VA_SEM), which the host polls at the SEM chunk's host VA.
+ * Discriminant for "engine completed but the shadow release write was lost"
+ * vs "engine never completed": with the module release, a completed QMD is
+ * always observable. Also makes the existing module-release fallback
+ * observable (it previously set no poll source, so it could never complete).
+ */
+static int gsp_phys_rmcall_gr_rel_mod_param;
+module_param_named(gsp_phys_rmcall_gr_rel_mod,
+ gsp_phys_rmcall_gr_rel_mod_param, int, 0644);
+MODULE_PARM_DESC(gsp_phys_rmcall_gr_rel_mod,
+ "Force the forwarded GR QMD release0 to the module semaphore (default 0; 1 = m64 engine-completion discriminant)");
+
+int gsp_phys_rmcall_gr_rel_mod_value(void)
+{
+ return gsp_phys_rmcall_gr_rel_mod_param;
+}
+EXPORT_SYMBOL_GPL(gsp_phys_rmcall_gr_rel_mod_value);
+
+/*
* Ladder VAS ownership selector (gsp_phys_rmcall_vas_shared; default 0).
* The H1 GR promote wall is a direct consequence of the ladder's
* externally-owned FERMI_VASPACE_A: with IS_EXTERNALLY_OWNED the RM treats