diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/gsp_sema_service.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 9f6840e..9ba7ed0 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -18029,6 +18029,9 @@ static u32 svc_pushraw_nz; * summary (first-hit offsets + first data word). Read-only; bounded. */ static u32 svc_mme_census_n; +static u32 svc_mme_xscan_n; +/* eng48: defined with its module_param further below; the census reads it. */ +static bool svc_mme_prelude_cap_any; static void svc_mme_census(const u8 *buf, u32 len, u64 push_va, u32 h_object) { @@ -18039,7 +18042,14 @@ static void svc_mme_census(const u8 *buf, u32 len, u64 push_va, u32 h_object) if (!READ_ONCE(svc_mme_census_flag) || svc_mme_census_n >= 128) return; - if ((h_object & 0xfffff000u) != 0xbeef0000u) + /* + * eng48 diagnostic: the prelude feed gate is now channel-agnostic + * when sema_mme_prelude_cap_any is on, so the census that answers + * "which push carries the MME setup runs" must follow the same + * rule; otherwise an X-lane setup push is invisible here. + */ + if ((h_object & 0xfffff000u) != 0xbeef0000u && + !READ_ONCE(svc_mme_prelude_cap_any)) return; while (off + 4 <= len && nhit < 16) { u32 hdr, op, cnt, addr; @@ -18076,6 +18086,16 @@ static void svc_mme_census(const u8 *buf, u32 len, u64 push_va, u32 h_object) svc_mme_census_n++; pr_info("sema-mme-census: h=0x%x va=0x%llx len=%u n=%u hits=[%s]\n", h_object, push_va, len, nhit, line); + } else if ((h_object & 0xfffff000u) != 0xbeef0000u && + svc_mme_xscan_n < 32) { + /* + * eng48: evidence of scan coverage on the X lane. A zero + * here still proves the push was censused (the absence of + * MME-family ids is a finding, not a skipped scan). + */ + svc_mme_xscan_n++; + pr_info("sema-mme-xscan: h=0x%x va=0x%llx len=%u hits=0\n", + h_object, push_va, len); } } |
