summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c22
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);
}
}