From: Alex Hung <[email protected]>

[ 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 <[email protected]>
Acked-by: Tom Chung <[email protected]>
Signed-off-by: Alex Hung <[email protected]>
Tested-by: Daniel Wheeler <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
 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 5eef17f092ceb..875661737f496 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8370,15 +8370,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