diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1243-drm-amd-display-Fix-deadlock-with-display-during-han.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1243-drm-amd-display-Fix-deadlock-with-display-during-han.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1243-drm-amd-display-Fix-deadlock-with-display-during-han.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1243-drm-amd-display-Fix-deadlock-with-display-during-han.patch new file mode 100644 index 00000000..eb8fa3d9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1243-drm-amd-display-Fix-deadlock-with-display-during-han.patch @@ -0,0 +1,55 @@ +From 576ee86dd91cdee375fb597f4a7b4e9b8c75fe3a Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <andrey.grodzovsky@amd.com> +Date: Wed, 13 Feb 2019 13:53:45 -0500 +Subject: [PATCH 1243/2940] drm/amd/display: Fix deadlock with display during + hanged ring recovery. + +When ring hang happens amdgpu_dm_commit_planes during flip is holding +the BO reserved and then stack waiting for fences to signal in +reservation_object_wait_timeout_rcu (which won't signal because there +was a hnag). Then when we try to shutdown display block during reset +recovery from drm_atomic_helper_suspend we also try to reserve the BO +from dm_plane_helper_cleanup_fb ending in deadlock. +Also remove useless WARN_ON + +Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> +Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +--- + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index d30c7ffa5561..9c8cd95a412d 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -4829,14 +4829,21 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, + */ + abo = gem_to_amdgpu_bo(fb->obj[0]); + r = amdgpu_bo_reserve(abo, true); +- if (unlikely(r != 0)) { ++ if (unlikely(r != 0)) + DRM_ERROR("failed to reserve buffer before flip\n"); +- WARN_ON(1); +- } + +- /* Wait for all fences on this FB */ +- WARN_ON(reservation_object_wait_timeout_rcu(abo->tbo.resv, true, false, +- MAX_SCHEDULE_TIMEOUT) < 0); ++ /* ++ * Wait for all fences on this FB. Do limited wait to avoid ++ * deadlock during GPU reset when this fence will not signal ++ * but we hold reservation lock for the BO. ++ */ ++ r = reservation_object_wait_timeout_rcu(abo->tbo.resv, ++ true, false, ++ msecs_to_jiffies(5000)); ++ if (unlikely(r == 0)) ++ DRM_ERROR("Waiting for fences timed out."); ++ ++ + + amdgpu_bo_get_tiling_flags(abo, &tiling_flags); + +-- +2.17.1 + |