From 6d5d8b91acc8e5f70cc0f578e13c48fe85e9dd4b Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Fri, 9 Oct 2026 12:38:01 -0400 Subject: vgsp-sema: free the release-apply budget and re-arm the push decode budget per session (ISSUE-0002) The ipin store/lookup probes served their purpose (the displaced-pin race is understood and handled); keeping them consumed the shared per-session counter_rel_dbg budget before the release path could log, which left r25's second-client stall blind. Remove them and reset svc.entry_log in the session flush so the next session's sema-push decode lines are visible. --- kernel/gsp_sema_service.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index c002c50..904ac65 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -1962,15 +1962,8 @@ static void svc_ipin_alt_store(u64 va, u64 pa, int ap) static int svc_ipin_lookup(u64 va, u64 *pa, int *ap) { - int rc = pin_lookup_tab(svc.ipin, SVC_IPIN_SLOTS, SVC_IPIN_PROBE, va, pa, - ap, false); - - if (svc_pool_sem_va(va) && gsp_sema_dbg && svc.counter_rel_dbg < 256) { - svc.counter_rel_dbg++; - pr_info("vgsp-sema: ipin-lookup va=0x%llx rc=%d pa=0x%llx\n", - va, rc, rc ? 0 : *pa); - } - return rc; + return pin_lookup_tab(svc.ipin, SVC_IPIN_SLOTS, SVC_IPIN_PROBE, va, pa, + ap, false); } static void svc_ipin_store(u64 va, u64 pa, int ap) @@ -1998,10 +1991,6 @@ static void svc_ipin_store(u64 va, u64 pa, int ap) */ if (svc_pool_sem_va(va)) svc_pool_pa_forget(va); - if (svc_pool_sem_va(va) && gsp_sema_dbg && svc.counter_rel_dbg < 256) { - svc.counter_rel_dbg++; - pr_info("vgsp-sema: ipin-store va=0x%llx pa=0x%llx\n", va, pa); - } } /* Any pinned translation: injected truth first, then self-discovered pins. */ @@ -6703,6 +6692,14 @@ static void svc_session_flush(void) svc.counter_noslot_dbg = 0; svc.sem256_log = 0; svc.xfer_raw_log = 0; + /* + * The push decode budget (`sema-push` lines) is per-session too: the + * first client of a boot otherwise spends it and the next session's + * release decode is invisible in exactly the runs that need diagnosis + * (the second client's missing release was undecodable in r25 because + * entry_log was already exhausted by the first client). + */ + svc.entry_log = 0; memset(svc_hot, 0, sizeof(svc_hot)); memset(svc_retry_q, 0, sizeof(svc_retry_q)); memset(svc_pool_pa, 0, sizeof(svc_pool_pa)); -- cgit v1.2.3