summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/gsp_phys_booter.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index c8e224b..df78841 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -19359,6 +19359,31 @@ MODULE_PARM_DESC(sema_gl_mme_iram_gate_build,
"Do the IRAM-gate readback in the launch builder before the doorbell (default 1; the calls-authorizing check)");
/*
+ * eng36: PARTIAL-PART WINDOW KEEP. The load-only carrier gate below turns
+ * every 3D window launch into a windowless program carrier while the
+ * generation is not latched+live. On the X lane the packed program fits one
+ * <=2048-word block together with the tiny window, so the final part rides
+ * the window launch and the generation goes live. The beef lane's draw
+ * windows (156-400 words) leave only ~1600 words of room and the packed
+ * program is 2799 IR words + 162 SA, so every window launch emits only a
+ * PART (`MME-PRELUDE pack-part ir_words=1599/2799`) and is then made
+ * windowless - the draw's own state never lands and the completion is
+ * deferred to an unrelated later push (c382: completion launches timed out
+ * GP_GET-frozen / poisoned MISSING_MACRO_DATA, so live_gen never caught the
+ * generation and every beef window stayed dropped).
+ * With this knob on, only a launch that emits the FINAL part (pre_done) is
+ * a load-only carrier; partial-part launches and no-emission launches keep
+ * the window in the proven-safe calls-held shape (`mme_hold_calls`), so the
+ * client state accumulates and the next draw can run real calls once the
+ * completion carrier promotes the generation. Default 0 = legacy drop.
+ */
+static bool gsp_phys_rmcall_gr_mme_partial_keep_window;
+module_param_named(sema_gl_mme_partial_keep_window,
+ gsp_phys_rmcall_gr_mme_partial_keep_window, bool, 0644);
+MODULE_PARM_DESC(sema_gl_mme_partial_keep_window,
+ "Keep the window (calls-held) on a launch that emits only a PART of the packed MME program; only the final-part launch stays a windowless load carrier (default 0 = legacy drop-everything)");
+
+/*
* SESSION 153-CONTINUED-107: separate knob for the per-launch chronology
* probe lines. They write the MME debug port DURING a live launch, and the
* first three probe-bearing cycles (r1369..r1371) all parked the engine on
@@ -22506,7 +22531,19 @@ if (gsp_phys_gr_slot_kept(j, sa_mask,
(READ_ONCE(gsp_phys_rmcall_gr_mme_live_skip) &&
READ_ONCE(gsp_phys_gr_mme_live_gen) == pl_gen);
- if (!(latch_now && live_now))
+ /*
+ * eng36: a launch that emits only a PART of the
+ * packed program is not a load-only carrier when the
+ * knob is set: the load cannot complete here, and
+ * dropping the window loses the draw's state while
+ * deferring the completion to an unrelated push
+ * (see the sema_gl_mme_partial_keep_window comment).
+ * Only the final-part launch (pre_done) and the
+ * legacy default keep the windowless carrier shape.
+ */
+ if (!(latch_now && live_now) &&
+ (!READ_ONCE(gsp_phys_rmcall_gr_mme_partial_keep_window) ||
+ pre_done))
mme_load_only = true;
}
/*