summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-14 09:22:33 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-14 09:22:33 -0500
commitb44694b5783eee663a027ccd59929d6471a044bc (patch)
treea5596b653db0d0a9dff161b06ef7c6d99e4bdcaa /kernel
parentaa10c3770185a858918db3f0d8cc671b94974936 (diff)
downloadopen-iov-b44694b5783eee663a027ccd59929d6471a044bc.tar.gz
open-iov-b44694b5783eee663a027ccd59929d6471a044bc.zip
vgsp: keep partial-part MME pack launches' windows via sema_gl_mme_partial_keep_window (default 0 = legacy) (eng36/eng37)
The load-only carrier gate turns every 3D window launch windowless while the packed MME program generation is not latched+live. A launch that emits only a PART of the packed program (block room exhausted) cannot make the program resident, so dropping its window also discards the draw's state and defers the completion to an unrelated later push, where it dies (GP_GET-frozen / MISSING_MACRO_DATA) and the generation never promotes. New knob sema_gl_mme_partial_keep_window (default 0 = legacy drop-everything): when set, only a launch that emits the FINAL part of the pack stays a windowless carrier; partial-part launches keep their window in the calls-held shape so client state accumulates and the completing carrier can promote the generation and let the next window run real calls.
Diffstat (limited to 'kernel')
-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;
}
/*