summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-21 00:51:24 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-21 00:51:24 -0400
commit229bec2c0bc6c638f80e4b4591806146f518be70 (patch)
tree3a9e33aa8a76386edbc359046b1eec8678f10ba8
parent9a0e97580f70365f34dcc170b679bbcc9c3afdad (diff)
downloadopen-iov-229bec2c0bc6c638f80e4b4591806146f518be70.tar.gz
open-iov-229bec2c0bc6c638f80e4b4591806146f518be70.zip
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.
-rw-r--r--kernel/gsp_sema_service.c8
1 files changed, 7 insertions, 1 deletions
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;