From 2ae643432b2d1e37e90191afa6fbac042967bfe7 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Wed, 21 Oct 2026 12:17:47 -0400 Subject: gr: default wedge quiet window 40 s (r417 live: a 20 s host hold did not heal, the next 40 s hold did - legit engine writes resumed) r417 reproduced the wedge deterministically with wedge_recover v2 (ITER 0 green, ITER 1 zero-write, both with the legacy win0 shadow path on and with the icache-invalidate bit forced off - the bit is not the trigger) and exercised the r410 quiet path for the first time: the 20 s hold left the outcome at 0 pages, the following 40 s hold logged 'WEDGE-QUIET healed: engine wrote 1 page(s) after the 40000 ms hold (streak was 1)'. A shadow-win0=0 A/B showed the engine executes but fetches the wrong program in that legacy shape (all-32768 wrong), so the win0 shadow path stays on. Default base raised to 40 s so the first hold heals instead of paying 20 s + 40 s. --- kernel/gsp_phys_gpu.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'kernel/gsp_phys_gpu.c') diff --git a/kernel/gsp_phys_gpu.c b/kernel/gsp_phys_gpu.c index 6bd5aa0..b93c254 100644 --- a/kernel/gsp_phys_gpu.c +++ b/kernel/gsp_phys_gpu.c @@ -1124,23 +1124,25 @@ int gsp_phys_gr_nowrite_retries_value(void) EXPORT_SYMBOL_GPL(gsp_phys_gr_nowrite_retries_value); /* - * r410 wedge quiet window (gsp_phys_gr_wedge_quiet_ms; default 20000, clamped + * r410 wedge quiet window (gsp_phys_gr_wedge_quiet_ms; default 40000, clamped * [0,120000]; 0 disables). The sticky per-lane no-execute wedge (100% of * launches no-write while kept busy) is proven to CLEAR when the lane stays * quiet for tens of seconds (r409: a ~37 s client gap healed a wedged run; * r416: 58 consecutive no-write launches during a 126 s client run, first - * launches green again after the lane sat ~52 s idle). Immediate retries and + * launches green again after the lane sat ~52 s idle; r417: a 20 s host hold + * did not heal, a 40 s hold did - "WEDGE-QUIET healed: engine wrote 1 + * page(s) after the 40000 ms hold"). Immediate retries and * re-arms do not heal it (r409/r154). So when a zero-write outcome follows a * previous accepted zero-write launch, the retry loop first holds this many ms * with NO submissions to the engine, then re-arms (lane enable + schedules) * and re-publishes once. The value doubles per further quiet retry. The * quiet window is recovery-only: a launch that wrote anything never enters it. */ -static unsigned int gsp_phys_gr_wedge_quiet_ms_param = 20000u; +static unsigned int gsp_phys_gr_wedge_quiet_ms_param = 40000u; module_param_named(gsp_phys_gr_wedge_quiet_ms, gsp_phys_gr_wedge_quiet_ms_param, uint, 0644); MODULE_PARM_DESC(gsp_phys_gr_wedge_quiet_ms, - "Quiet-window ms before retrying a launch on a lane whose previous launch also no-wrote (0=disable, default 20000)"); + "Quiet-window ms before retrying a launch on a lane whose previous launch also no-wrote (0=disable, default 40000; r417: a 20 s hold did not heal, 40 s healed)"); unsigned int gsp_phys_gr_wedge_quiet_ms_value(void) { -- cgit v1.2.3