From: Alex Hung <alex.h...@amd.com>

[ Upstream commit ae13c8a5cff92015b9a3eb7cee65ebc75859487f ]

[WHY & HOW]
A read of acrtc_attach->base.state->event was not locked so moving it
inside the spinlock.

This fixes a LOCK_EVASION issue reported by Coverity.

Reviewed-by: Harry Wentland <harry.wentl...@amd.com>
Acked-by: Tom Chung <chiahsuan.ch...@amd.com>
Signed-off-by: Alex Hung <alex.h...@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 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 fca6f7d4c28e2..64fdce551e627 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8698,15 +8698,13 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,
                                bundle->stream_update.vrr_infopacket =
                                        &acrtc_state->stream->vrr_infopacket;
                }
-       } else if (cursor_update && acrtc_state->active_planes > 0 &&
-                  acrtc_attach->base.state->event) {
-               drm_crtc_vblank_get(pcrtc);
-
+       } else if (cursor_update && acrtc_state->active_planes > 0) {
                spin_lock_irqsave(&pcrtc->dev->event_lock, flags);
-
-               acrtc_attach->event = acrtc_attach->base.state->event;
-               acrtc_attach->base.state->event = NULL;
-
+               if (acrtc_attach->base.state->event) {
+                       drm_crtc_vblank_get(pcrtc);
+                       acrtc_attach->event = acrtc_attach->base.state->event;
+                       acrtc_attach->base.state->event = NULL;
+               }
                spin_unlock_irqrestore(&pcrtc->dev->event_lock, flags);
        }
 
-- 
2.43.0

Reply via email to