summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorVeera Sundaram Sankaran <veeras@codeaurora.org>2015-12-08 16:57:02 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:14:14 -0700
commite22c8ccbee27c2258c790e7961480ebd1c8bce4b (patch)
tree3c59cc5733254b67fefa3b5cc8c6196a4ce8a8b1 /drivers/video/fbdev
parent9732bbbbd39d7c06f6f2b26292c46ff6e443ad34 (diff)
msm: mdss: fix deadlock between display and dsi status check thread
The vsync handler in display thread holds ov_lock followed by offlock. And the DSI status check thread for cmd mode panel holds offlock followed by ovlock, causing a clear deadlock scenario. Fix it by acquiring ov_lock before offlock in DSI status check thread. Change-Id: I54ef54b5ca7e4c87e909c510b28ff7770bb20a3b Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/dsi_status_6g.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/dsi_status_6g.c b/drivers/video/fbdev/msm/dsi_status_6g.c
index 269fd2c7aa5c..bec6818e95a5 100644
--- a/drivers/video/fbdev/msm/dsi_status_6g.c
+++ b/drivers/video/fbdev/msm/dsi_status_6g.c
@@ -126,15 +126,15 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval)
*/
mutex_lock(&ctrl_pdata->mutex);
- mutex_lock(&ctl->offlock);
if (mipi->mode == DSI_CMD_MODE)
mutex_lock(&mdp5_data->ov_lock);
+ mutex_lock(&ctl->offlock);
if (mdss_panel_is_power_off(pstatus_data->mfd->panel_power_state) ||
pstatus_data->mfd->shutdown_pending) {
+ mutex_unlock(&ctl->offlock);
if (mipi->mode == DSI_CMD_MODE)
mutex_unlock(&mdp5_data->ov_lock);
- mutex_unlock(&ctl->offlock);
mutex_unlock(&ctrl_pdata->mutex);
pr_err("%s: DSI turning off, avoiding panel status check\n",
__func__);
@@ -160,9 +160,9 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval)
ret = ctrl_pdata->check_status(ctrl_pdata);
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
+ mutex_unlock(&ctl->offlock);
if (mipi->mode == DSI_CMD_MODE)
mutex_unlock(&mdp5_data->ov_lock);
- mutex_unlock(&ctl->offlock);
mutex_unlock(&ctrl_pdata->mutex);
if ((pstatus_data->mfd->panel_power_state == MDSS_PANEL_POWER_ON)) {