A scheduler timeout can still run after the device has been declared wedged. guc_submit_hint_wedged() only returns true for the no-reset debug mode, so other wedge modes can continue into GuC timeout recovery.
The killed-queue case already preserves an existing wedge. Extend the same check to non-killed queues, where guc_submit_hint_wedged() returns false outside the no-reset debug mode. If the device is already wedged, use the existing wedged cleanup path and avoid further hardware recovery. This also avoids the kernel-submitted job timeout warning seen after wedge isolation. The timeout was observed as: [ 8939.200065] xe 0000:03:00.0: [drm] Tile0: GT0: Kernel-submitted job timed out [ 8939.200066] WARNING: xe_guc_submit.c:1683 at guc_exec_queue_timedout_job+0x1160/0x2550 Cc: Matthew Brost <[email protected]> Cc: Thomas Hellström <[email protected]> Cc: Himal Prasad Ghimiray <[email protected]> Cc: Rodrigo Vivi <[email protected]> Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Arvind Yadav <[email protected]> --- drivers/gpu/drm/xe/xe_guc_submit.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c index a307af458cf8..287a30027b1c 100644 --- a/drivers/gpu/drm/xe/xe_guc_submit.c +++ b/drivers/gpu/drm/xe/xe_guc_submit.c @@ -1594,10 +1594,9 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job) * Killed queues must not newly wedge the device, but preserve an * already-wedged state to avoid warning on teardown timeouts. */ - if (!exec_queue_killed(q)) + wedged = xe_device_wedged(xe); + if (!wedged && !exec_queue_killed(q)) wedged = guc_submit_hint_wedged(exec_queue_to_guc(q)); - else - wedged = xe_device_wedged(xe); set_exec_queue_banned(q); -- 2.43.0
