diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-23 15:03:33 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-23 15:03:33 -0400 |
| commit | aa008361479882935798c78ea8ebd791533cca63 (patch) | |
| tree | 7ede5abba2cc0ff18889b27c119188c966de9ed4 /kernel/gsp_sema_service.c | |
| parent | 8de9f0e24d9511db9edab879fac1f8f07a3e9fbc (diff) | |
| download | open-iov-aa008361479882935798c78ea8ebd791533cca63.tar.gz open-iov-aa008361479882935798c78ea8ebd791533cca63.zip | |
vgsp-gr r554: the per-VA launch-defer latch needs 64 slots, not 8
r553 soak evidence (victory_reduce, 430 s stall, 0 hangs): the same launch
push VA (0x20043be64) was deferred on every pass for 7+ minutes ("partial
argument set: 7-8 pages unresolved"). A client's UVM pool allocates ~8-10
channels and each command buffer reuses two launch push slots, so more
than 8 distinct push VAs rotate through the guard; with 8 latch slots each
new VA evicted another and the one-deferral-per-VA guarantee thrashed -
the second sighting of any VA found its record gone and deferred again,
so a partial argument set that never resolves held the launch forever.
64 slots cover a full client with margin (1 KB of static state).
Diffstat (limited to 'kernel/gsp_sema_service.c')
| -rw-r--r-- | kernel/gsp_sema_service.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 91f1df9..b2cf8a5 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -20673,7 +20673,17 @@ static void svc_handle_map_add(void); * any VA proceeds (bounded, cannot hang), interleaved launches included. */ #define SVC_GR_ARG_DEFER_MS 30000u -#define SVC_GR_ARG_DEFER_SLOTS 8 +/* + * r554: 64, not 8. The latch must remember every launch push VA of the + * current client (the UVM pool allocates ~8-10 channels and each command + * buffer reuses two launch push slots, so >8 distinct VAs are in rotation); + * with 8 slots each new VA evicted another and the "one deferral per VA" + * guarantee thrashed - r553 soak: victory_reduce re-deferred the same push + * VA (0x20043be64) every pass for 430 s ("partial argument set: 7-8 pages + * unresolved") and never forwarded. 64 covers a full client with margin; + * the table is per-boot tiny (64 * 16 B). + */ +#define SVC_GR_ARG_DEFER_SLOTS 64 static u64 svc_gr_arg_defer_va[SVC_GR_ARG_DEFER_SLOTS]; static unsigned long svc_gr_arg_defer_j[SVC_GR_ARG_DEFER_SLOTS]; static u32 svc_gr_arg_defer_pos; |
