summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-09 12:38:01 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-09 12:38:01 -0400
commit6d5d8b91acc8e5f70cc0f578e13c48fe85e9dd4b (patch)
treea2761f605415305cfb26046b1c78df50bd0814d6
parent04c6190ed1c63fd69ea97c0ee1c9ff488d8b9202 (diff)
downloadopen-iov-6d5d8b91acc8e5f70cc0f578e13c48fe85e9dd4b.tar.gz
open-iov-6d5d8b91acc8e5f70cc0f578e13c48fe85e9dd4b.zip
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.
-rw-r--r--kernel/gsp_sema_service.c23
1 files 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));