FAILED: patch "[PATCH] drm/xe: Trigger queue cleanup if not in wedged mode 2" failed to apply to 6.18-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x e0f82655df6fbb15b318e9d56724cd54b1cfb04d
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026032130-saturday-simplify-bedc@gregkh' --subject-prefix 'PATCH 6.18.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e0f82655df6fbb15b318e9d56724cd54b1cfb04d Mon Sep 17 00:00:00 2001
From: Matthew Brost <[email protected]>
Date: Tue, 10 Mar 2026 18:50:35 -0400
Subject: [PATCH] drm/xe: Trigger queue cleanup if not in wedged mode 2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The intent of wedging a device is to allow queues to continue running only in wedged mode 2. In other modes, queues should initiate cleanup and signal all remaining fences. Fix xe_guc_submit_wedge to correctly clean up queues when wedge mode != 2.
drivers/gpu/drm/xe/xe_guc_submit.c +22 -13
@@ -1271,6 +1271,7 @@ static void disable_scheduling_deregister(struct xe_guc *guc,*/ void xe_guc_submit_wedge (struct xe_guc *guc) { +struct xe_device *xe =guc_to_xe (guc);struct xe_gt *gt =guc_to_gt (guc);struct xe_exec_queue *q;unsigned long index;
@@ -1285,20 +1286,28 @@ void xe_guc_submit_wedge(struct xe_guc *guc)if (!guc->submission_state.initialized)return ; - err =devm_add_action_or_reset (guc_to_xe (guc)->drm.dev, - guc_submit_wedged_fini, guc); -if (err) { -xe_gt_err (gt,"Failed to register clean-up in wedged.mode=%s; " -"Although device is wedged.\n" , -xe_wedged_mode_to_string (XE_WEDGED_MODE_UPON_ANY_HANG_NO_RESET )); -return ; - } +if (xe->wedged.mode ==2 ) { + err =devm_add_action_or_reset (guc_to_xe (guc)->drm.dev, + guc_submit_wedged_fini, guc); +if (err) { +xe_gt_err (gt,"Failed to register clean-up on wedged.mode=2; " +"Although device is wedged.\n" ); +return ; + } -mutex_lock (&guc->submission_state.lock); -xa_for_each (&guc->submission_state.exec_queue_lookup, index, q) -if (xe_exec_queue_get_unless_zero (q)) -set_exec_queue_wedged (q); -mutex_unlock (&guc->submission_state.lock); +mutex_lock (&guc->submission_state.lock); +xa_for_each (&guc->submission_state.exec_queue_lookup, index, q) +if (xe_exec_queue_get_unless_zero (q)) +set_exec_queue_wedged (q); +mutex_unlock (&guc->submission_state.lock); + }else { +/* Forcefully kill any remaining exec queues, signal fences */ +guc_submit_reset_prepare (guc); +xe_guc_submit_stop (guc); +xe_guc_softreset (guc); +xe_uc_fw_sanitize (&guc->fw); +xe_guc_submit_pause_abort (guc); + } }static bool guc_submit_hint_wedged (struct xe_guc *guc)