]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Only toggle scheduling in TDR if GuC is running
authorMatthew Brost <matthew.brost@intel.com>
Sat, 10 Jan 2026 01:27:35 +0000 (17:27 -0800)
committerMatthew Brost <matthew.brost@intel.com>
Sat, 10 Jan 2026 21:39:52 +0000 (13:39 -0800)
If the firmware is not running during TDR (e.g., when the driver is
unloading), there's no need to toggle scheduling in the GuC. In such
cases, skip this step.

v4:
 - Bail on wait UC not running (Niranjana)

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Link: https://patch.msgid.link/20260110012739.2888434-4-matthew.brost@intel.com
drivers/gpu/drm/xe/xe_guc_submit.c

index b7824834ff337717125c31517bb56872ac32b096..7b0bbe48d2aa09051590ad34658662fe39e6afab 100644 (file)
@@ -1638,7 +1638,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
                if (exec_queue_reset(q))
                        err = -EIO;
 
-               if (!exec_queue_destroyed(q)) {
+               if (!exec_queue_destroyed(q) && xe_uc_fw_is_running(&guc->fw)) {
                        /*
                         * Wait for any pending G2H to flush out before
                         * modifying state
@@ -1673,6 +1673,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
                 */
                smp_rmb();
                ret = wait_event_timeout(guc->ct.wq,
+                                        !xe_uc_fw_is_running(&guc->fw) ||
                                         !exec_queue_pending_disable(q) ||
                                         xe_guc_read_stopped(guc) ||
                                         vf_recovery(guc), HZ * 5);