From 1a49c7eb69c03f58bc51939828de222a2ac42fea Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Fri, 23 Oct 2026 07:32:26 -0400 Subject: vgsp-sema: keep the learned VA map across the session flush (re-compact, not wipe) The flush fires when the channel table momentarily empties - a live client's UVM channel cycling triggers it - and wiping the map left the client's already-resolved data VAs unresolvable until a rebuild scan re-found them, which it may not. Evidence: a mid-battery boot where multikernel's operands went NO ENTRY 40+ s after a flush (the rebuild restored 14-31 K entries without them); the pump stalled for minutes and the next clients read back whole-page garbage. The map is a cache with a merge-on-rebuild contract, so re-compact it (dedup + sort) and keep it as the merge base; reused-VA correctness stays with the ledger landing, the pin-wins rule and the fresh scan. Also: push_battery.sh now pushes inplace_scale (the battery list had it, the push list did not). --- kernel/gsp_sema_service.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'kernel') diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 42e8d76..22eccb7 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -11700,7 +11700,23 @@ static void svc_session_flush(void) } svc_gr_diag_reset(); /* m150: per-session diagnostic budgets */ - svc.map_n = 0; + /* + * r532: the learned map is NOT wiped here. The flush fires when the + * channel table momentarily empties - which a live client's UVM + * channel cycling triggers - and wiping the map then left the + * client's already-resolved data VAs unresolvable until a rebuild + * scan re-found them, which it may not: r531 multikernel's operands + * (0x72a05a5...) went NO ENTRY 40+ s after the gen-12 flush (the + * rebuild restored 14-31 K entries without them) and the pump + * stalled for minutes with the client spinning; streams2/ + * streams_events then read back whole-page garbage. The map is a + * cache with a merge-on-rebuild contract (the fresh scan updates a + * VA it re-finds and appends the rest), so a re-compaction keeps it + * bounded without dropping live translations. Reused-VA correctness + * is carried by the ledger (the launch's own landing, r349), the + * pin-wins rule and the fresh scan - not by wholesale eviction. + */ + svc_map_finalize(); svc_pb_n = 0; svc_pd_found = 0; svc_pd_attempts = 0; -- cgit v1.2.3