summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/gsp_sema_service.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 715e458..369f854 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -6328,6 +6328,18 @@ static void svc_session_flush(void)
svc_fwd_rel_n = 0;
svc_grce_dst_ring_next = 0;
svc_ring_done = 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
+ * scan bitmap. Leaving them made the second client resolve through
+ * the first client's pages.
+ */
+ memset(svc.pin, 0, sizeof(svc.pin));
+ svc.pin_n = 0;
+ memset(svc_cnt_der, 0, sizeof(svc_cnt_der));
+ svc_cnt_der_n = 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));
memset(svc_fwd_rel, 0, sizeof(svc_fwd_rel));