Xe can skip the reset if TDR has fired before the free job worker. Instead of using the scheduler internals to add the job to the pending list, use the DRM_GPU_SCHED_STAT_RUNNING status to skip the reset and rearm the timer.
Note that there is no need to restart submission if it hasn't been stopped. Signed-off-by: Maíra Canal <mca...@igalia.com> --- drivers/gpu/drm/xe/xe_guc_submit.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c index 31bc2022bfc2d80f0ef54726dfeb8d7f8e6b32c8..4c40d3921d4a5e190d3413736a68c6e7295223dd 100644 --- a/drivers/gpu/drm/xe/xe_guc_submit.c +++ b/drivers/gpu/drm/xe/xe_guc_submit.c @@ -1058,12 +1058,8 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job) * list so job can be freed and kick scheduler ensuring free job is not * lost. */ - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &job->fence->flags)) { - xe_sched_add_pending_job(sched, job); - xe_sched_submission_start(sched); - - return DRM_GPU_SCHED_STAT_NOMINAL; - } + if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &job->fence->flags)) + return DRM_GPU_SCHED_STAT_RUNNING; /* Kill the run_job entry point */ xe_sched_submission_stop(sched); -- 2.49.0