diff options
| -rw-r--r-- | kernel/gsp_sema_service.c | 16 |
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 |
