diff options
Diffstat (limited to 'kernel/gsp_phys_booter.c')
| -rw-r--r-- | kernel/gsp_phys_booter.c | 39 |
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; } /* |
