aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1243-drm-amd-display-Fix-deadlock-with-display-during-han.patch
diff options
context:
space:
mode:
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.patch55
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
+