From b240ae79e4e2788e1be0e21f2056532eb1db6a15 Mon Sep 17 00:00:00 2001 From: Rajkumar Subbiah Date: Tue, 18 Aug 2020 22:17:08 -0400 Subject: [PATCH] disp: msm: dp: avoid use of mst_lock in hpd callbacks DP MST driver registers bridge callback functions with the DRM framework. mst_lock is used for synchronization of the mst bridge functions. These functions call into dp_display where a session lock is obtained for the display. HPD callbacks, on the other hand, are first handled by dp_display. During these callbacks, dp_display takes a session lock first before calling into DP MST driver layer. Currently, the DP MST layer waits on mst_lock which can result in a deadlock. This change removes the usage of mst_lock inside hpd callback functions and just uses the session lock for synchronization. Change-Id: I7ec338004eef43ac0f1e1f092463e9915cd60684 Signed-off-by: Rajkumar Subbiah --- msm/dp/dp_mst_drm.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/msm/dp/dp_mst_drm.c b/msm/dp/dp_mst_drm.c index e7b9712bc308..7910ae512167 100644 --- a/msm/dp/dp_mst_drm.c +++ b/msm/dp/dp_mst_drm.c @@ -2163,11 +2163,8 @@ static int dp_mst_display_set_mgr_state(void *dp_display, bool state, * on hpd_low, set_mgr_state is called after hotplug event is sent and * the session_state was already updated prior to that. */ - if (state) { - mutex_lock(&mst->mst_lock); + if (state) mst->mst_session_state = state; - mutex_unlock(&mst->mst_lock); - } if (info && !info->mst_protocol) { if (state) { @@ -2201,11 +2198,8 @@ static void dp_mst_display_hpd(void *dp_display, bool hpd_status) * session state should be unset here for the connection status to be * updated accordingly. */ - if (!hpd_status) { - mutex_lock(&mst->mst_lock); + if (!hpd_status) mst->mst_session_state = hpd_status; - mutex_unlock(&mst->mst_lock); - } dp_mst_hpd_event_notify(mst, hpd_status); }