summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/gsp_sema_service.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index f46158e..39e0096 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -6401,6 +6401,22 @@ static void svc_session_flush(void)
svc_grce_dst_ring_next = 0;
svc_ring_done = 0;
/*
+ * Push-buffer and GR-ring discovery are boot-scoped bitmaps (and pass
+ * budgets): a rank marked done stays marked even though this flush
+ * just wiped the pins the mark stood for. The next client reuses the
+ * same ranks, so discovery would skip every one of them and its push
+ * pages could never be paired - the observed second-client hang where
+ * its releases are dropped ("no slot registered") and the guest waits
+ * forever. Re-arm the discovery state with the session (ISSUE-0002).
+ */
+ svc_pb_done = 0;
+ svc_pb_passes = 0;
+ svc_pb_idle = 0;
+ svc_pb_last = 0;
+ svc_pb_last_n = 0;
+ svc_gr_ring_done = 0;
+ svc_ring_n = 0;
+ /*
* The learned tables are session state too: the primary VA->PA pin
* table (consulted before every other source), the counter-derived
* cache (serves a cached PA without re-proving it) and the hot-page