From 229bec2c0bc6c638f80e4b4591806146f518be70 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Wed, 21 Oct 2026 00:51:24 -0400 Subject: sema: r398 size the inline-once table to 8192 slots (256 KB) r398 evidence: the memset's inline write executed twice for the same push (85634.101649 first, 85642.940808 replay 70 us before the D2H readback, zeroing the accumulator). 76 inline writes happened between the two - the 64-slot table had evicted the key. 8192 slots give a ~100x margin over the busiest observed burst. --- kernel/gsp_sema_service.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'kernel') diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index ef89a52..f803309 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -8419,8 +8419,14 @@ static bool svc_gr_cand_push_seen(u64 push_va) * bytes): the release payload inside every push makes the hash unique per * push, so a new client's identical-looking write never collides. Session * scoped (cleared by svc_session_flush). Service-thread only. + * + * Sizing (r398): the ring must outlive the gap between a push's first + * execution and its next re-decode. The observed failing case had 76 + * inline writes between the two, which evicted a 64-slot table and let + * the memset re-run; 8192 slots (256 KB) gives a ~100x margin over the + * busiest observed burst. */ -#define SVC_INLINE_ONCE_SLOTS 64 +#define SVC_INLINE_ONCE_SLOTS 8192 static struct { u64 push_va; u64 hash; -- cgit v1.2.3