summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c12
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;