diff options
Diffstat (limited to 'kernel/gsp_sema_service.c')
| -rw-r--r-- | kernel/gsp_sema_service.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index e7a0172..9f6840e 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -20027,6 +20027,19 @@ static u32 svc_mme_prelude_code_words; module_param_named(sema_mme_prelude_cap, svc_mme_prelude_flag, uint, 0644); MODULE_PARM_DESC(sema_mme_prelude_cap, "Capture the client's MME context-setup method runs (0x114..0x124, 0x234, 0x550..0x568, 0x3400..0x34fc) from trusted beef pushes for the GR launch builder's one-time preplay (default 1)"); +/* + * SESSION 158: the capture below rejects every non-beef channel, so the X + * DDX indirect lane (h=0x1000013) never builds a prelude (pl_n=0) and its + * replay window cannot emit the MME pack - the chain stops at the feed even + * though the release clause is channel-agnostic and c487 proved the X lane + * emits a 2799-word pack when pl_n>0. Admitting any channel's setup runs + * into the same signature-deduped capture gives the indirect lane the same + * prelude feed; default 0 keeps the legacy beef-only behaviour bit-for-bit. + */ +static bool svc_mme_prelude_cap_any; +module_param_named(sema_mme_prelude_cap_any, svc_mme_prelude_cap_any, bool, 0644); +MODULE_PARM_DESC(sema_mme_prelude_cap_any, + "Capture MME context-setup method runs from ANY channel, not only trusted beef pushes (default 0 = legacy beef-only)"); /* * SESSION 153-CONTINUED-63: the MME START-ADDRESS RAM table (macro slot -> @@ -20162,7 +20175,8 @@ static void svc_mme_prelude_capture(const u8 *buf, u32 len, u64 push_va, if (!READ_ONCE(svc_mme_prelude_flag)) return; - if ((h_object & 0xfffff000u) != 0xbeef0000u) + if ((h_object & 0xfffff000u) != 0xbeef0000u && + !READ_ONCE(svc_mme_prelude_cap_any)) return; while (off + 4u <= len) { u32 hdr, op, cnt, addr, span = 1u, i; |
