From b4177f74cb666711e5b854e02e2344e6bae18bf5 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Fri, 9 Oct 2026 10:19:24 -0400 Subject: vgsp-sema: re-arm push-buffer and GR-ring discovery with the session (ISSUE-0002) The push-buffer pairing bitmap (svc_pb_done), its pass budgets (svc_pb_passes/svc_pb_idle/svc_pb_last*) and the GR ring bitmap (svc_gr_ring_done) are boot-scoped, but svc_session_flush() only wiped the pins they stood for. The next client reuses the same CE/GR ranks, so discovery skipped every rank, its push pages could never be paired, and its decoded releases were dropped ('no slot registered'): the guest waited on a tracking semaphore that could never advance - the second-client hang. Re-arm the discovery state in the flush. --- kernel/gsp_sema_service.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'kernel') 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 @@ -6400,6 +6400,22 @@ static void svc_session_flush(void) svc_fwd_rel_n = 0; 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 -- cgit v1.2.3