summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/scheduler
diff options
context:
space:
mode:
authorZhenGuo Yin <zhenguo.yin@amd.com>2023-05-09 17:46:17 +0800
committerAlex Deucher <alexander.deucher@amd.com>2023-06-15 11:37:55 -0400
commit4f9b94d848696166011bead3109541ec2a523bb8 (patch)
treec4e002f9c3fe77a5fb9e1379368f73fc61d9f181 /drivers/gpu/drm/scheduler
parent71eaac368dccf0619f7adc012063930e459b133e (diff)
downloadlinux-stable-4f9b94d848696166011bead3109541ec2a523bb8.tar.gz
linux-stable-4f9b94d848696166011bead3109541ec2a523bb8.tar.bz2
linux-stable-4f9b94d848696166011bead3109541ec2a523bb8.zip
drm/scheduler: avoid infinite loop if entity's dependency is a scheduled error fence
[Why] drm_sched_entity_add_dependency_cb ignores the scheduled fence and return false. If entity's dependency is a scheduler error fence and drm_sched_stop is called due to TDR, drm_sched_entity_pop_job will wait for the dependency infinitely. [How] Do not wait or ignore the scheduled error fence, add drm_sched_entity_wakeup callback for the dependency with scheduled error fence. Signed-off-by: ZhenGuo Yin <zhenguo.yin@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/scheduler')
-rw-r--r--drivers/gpu/drm/scheduler/sched_entity.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
index 68e807ae136a..b2bbc8a68b30 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -384,7 +384,7 @@ static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity)
}
s_fence = to_drm_sched_fence(fence);
- if (s_fence && s_fence->sched == sched &&
+ if (!fence->error && s_fence && s_fence->sched == sched &&
!test_bit(DRM_SCHED_FENCE_DONT_PIPELINE, &fence->flags)) {
/*