| From 2fc40a92b37bb98b667be6a81ea1dc3eee94a2fb Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Jul 2024 16:59:19 -0700 |
| Subject: drm/xe: Resume TDR after GT reset |
| |
| From: Matthew Brost <matthew.brost@intel.com> |
| |
| [ Upstream commit 1b30f87e088b499eb74298db256da5c98e8276e2 ] |
| |
| Not starting the TDR after GT reset on exec queue which have been |
| restarted can lead to jobs being able to be run forever. Fix this by |
| restarting the TDR. |
| |
| Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs") |
| Signed-off-by: Matthew Brost <matthew.brost@intel.com> |
| Reviewed-by: Nirmoy Das <nirmoy.das@intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20240724235919.1917216-1-matthew.brost@intel.com |
| (cherry picked from commit 8ec5a4e5ce97d6ee9f5eb5b4ce4cfc831976fdec) |
| Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/xe/xe_gpu_scheduler.c | 5 +++++ |
| drivers/gpu/drm/xe/xe_gpu_scheduler.h | 2 ++ |
| drivers/gpu/drm/xe/xe_guc_submit.c | 1 + |
| 3 files changed, 8 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.c b/drivers/gpu/drm/xe/xe_gpu_scheduler.c |
| index e4ad1d6ce1d5f..7f24e58cc992f 100644 |
| --- a/drivers/gpu/drm/xe/xe_gpu_scheduler.c |
| +++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.c |
| @@ -90,6 +90,11 @@ void xe_sched_submission_stop(struct xe_gpu_scheduler *sched) |
| cancel_work_sync(&sched->work_process_msg); |
| } |
| |
| +void xe_sched_submission_resume_tdr(struct xe_gpu_scheduler *sched) |
| +{ |
| + drm_sched_resume_timeout(&sched->base, sched->base.timeout); |
| +} |
| + |
| void xe_sched_add_msg(struct xe_gpu_scheduler *sched, |
| struct xe_sched_msg *msg) |
| { |
| diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.h b/drivers/gpu/drm/xe/xe_gpu_scheduler.h |
| index 10c6bb9c93868..6aac7fe686735 100644 |
| --- a/drivers/gpu/drm/xe/xe_gpu_scheduler.h |
| +++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.h |
| @@ -22,6 +22,8 @@ void xe_sched_fini(struct xe_gpu_scheduler *sched); |
| void xe_sched_submission_start(struct xe_gpu_scheduler *sched); |
| void xe_sched_submission_stop(struct xe_gpu_scheduler *sched); |
| |
| +void xe_sched_submission_resume_tdr(struct xe_gpu_scheduler *sched); |
| + |
| void xe_sched_add_msg(struct xe_gpu_scheduler *sched, |
| struct xe_sched_msg *msg); |
| |
| diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c |
| index 3d91734980110..64b3a7848f4ab 100644 |
| --- a/drivers/gpu/drm/xe/xe_guc_submit.c |
| +++ b/drivers/gpu/drm/xe/xe_guc_submit.c |
| @@ -1740,6 +1740,7 @@ static void guc_exec_queue_start(struct xe_exec_queue *q) |
| } |
| |
| xe_sched_submission_start(sched); |
| + xe_sched_submission_resume_tdr(sched); |
| } |
| |
| int xe_guc_submit_start(struct xe_guc *guc) |
| -- |
| 2.43.0 |
| |