summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_sema_service.c')
-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 d47ec08..e96a7b6 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -12249,6 +12249,22 @@ static void svc_session_flush(void)
memset(svc_opdef_done, 0, sizeof(svc_opdef_done));
svc_opdef_done_next = 0;
/*
+ * r565: the GR exactly-once memories are boot-scoped caches keyed
+ * (partly) by push VA, and the UVM pool reuses the same launch push
+ * VAs for every client of the boot. svc_gr_cap_hist matches on the VA
+ * ALONE (8 entries, no hash), so a previous client's capture could
+ * classify a later client's fresh launch as "already captured" and
+ * skip it (`LAUNCH-SKIP (replay; already captured=1)`); the hash-keyed
+ * svc_gr_seen and the content-keyed svc_inline_once are lower risk but
+ * share the same lifetime. Reset all three per session - they refill
+ * within the session from the live client's own pushes.
+ */
+ memset(svc_gr_cap_hist, 0, sizeof(svc_gr_cap_hist));
+ svc_gr_cap_hist_pos = 0;
+ memset(svc_gr_seen, 0, sizeof(svc_gr_seen));
+ memset(svc_inline_once, 0, sizeof(svc_inline_once));
+ svc_inline_once_next = 0;
+ /*
* Re-arm the diagnostic log budgets per session. The first client of
* a boot would otherwise spend every budget and the next session's
* release path is invisible in exactly the runs that need diagnosis