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.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/kernel/gsp_phys_gpu.c b/kernel/gsp_phys_gpu.c
index e845493..e896664 100644
--- a/kernel/gsp_phys_gpu.c
+++ b/kernel/gsp_phys_gpu.c
@@ -638,13 +638,20 @@ int gsp_phys_rmcall_gr_qmdvirt_value(void)
EXPORT_SYMBOL_GPL(gsp_phys_rmcall_gr_qmdvirt_value);
/*
- * Explicit-PCAS gate (default 1). The rebuilt launch carries the vendor's
- * turingPushPcas(CU_PCAS_TYPE_COPY) pair (SEND_PCAS_A = QMD>>8 followed by
- * SEND_SIGNALING_PCAS_B = INVALIDATE|SCHEDULE). The stock guest push does
- * not emit these (it relies on the IQ2M window's implied copy PCAS); setting
- * this to 0 emits the pure vendor window-only form for the A/B test.
- */
-static int gsp_phys_rmcall_gr_pcas_param = 1;
+ * Explicit-PCAS gate (default 0 since r343 - the double-execution fix).
+ * The rebuilt launch used to carry the vendor's turingPushPcas
+ * (CU_PCAS_TYPE_COPY) pair (SEND_PCAS_A = QMD>>8 followed by
+ * SEND_SIGNALING_PCAS_B = INVALIDATE|SCHEDULE) ADDED to the inline-QMD run
+ * that the stock guest push already carries. The QMD's
+ * REQUIRE_SCHEDULING_PCAS bit is clear, so the inline run schedules by
+ * itself - the explicit pair was a SECOND scheduling edge and the same QMD
+ * was dispatched twice (launch_count: one atomicAdd +100 landed as +200;
+ * victory_reduce exactly 2x; scale/saxpy/memset2d doubled). The stock guest
+ * push has NO PCAS pair (captured push dumps); default 0 restores that
+ * single-edge form. 1 = re-add the pair (A/B debug only - with it on, the
+ * grid executes twice).
+ */
+static int gsp_phys_rmcall_gr_pcas_param;
module_param_named(gsp_phys_rmcall_gr_pcas,
gsp_phys_rmcall_gr_pcas_param, int, 0644);
MODULE_PARM_DESC(gsp_phys_rmcall_gr_pcas,