On Thu, Oct 16, 2025 at 01:48:26PM -0700, Matthew Brost wrote:
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.

Signed-off-by: Matthew Brost <[email protected]>
---
drivers/gpu/drm/xe/xe_guc_submit.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c 
b/drivers/gpu/drm/xe/xe_guc_submit.c
index bb1f2929441c..ea0cfd866981 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -1146,7 +1146,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

Looking at the code, it seems like if we skip this 'if' statement (when fw is
not running), then it will go wait for ct->wq. Not sure how that gets woken up
and logic might try to reset gt after that? Not sure if we should check
xe_uc_fw_is_running() here will one of the conditions to wait_event_timeout()
call cover this case and we can handle it appropriately after 
wait_event_timeout()
returns?

Niranjana

--
2.34.1

Reply via email to