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>
This commit is contained in:
parent
9732bbbbd3
commit
e22c8ccbee
1 changed files with 3 additions and 3 deletions
|
@ -126,15 +126,15 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mutex_lock(&ctrl_pdata->mutex);
|
mutex_lock(&ctrl_pdata->mutex);
|
||||||
mutex_lock(&ctl->offlock);
|
|
||||||
if (mipi->mode == DSI_CMD_MODE)
|
if (mipi->mode == DSI_CMD_MODE)
|
||||||
mutex_lock(&mdp5_data->ov_lock);
|
mutex_lock(&mdp5_data->ov_lock);
|
||||||
|
mutex_lock(&ctl->offlock);
|
||||||
|
|
||||||
if (mdss_panel_is_power_off(pstatus_data->mfd->panel_power_state) ||
|
if (mdss_panel_is_power_off(pstatus_data->mfd->panel_power_state) ||
|
||||||
pstatus_data->mfd->shutdown_pending) {
|
pstatus_data->mfd->shutdown_pending) {
|
||||||
|
mutex_unlock(&ctl->offlock);
|
||||||
if (mipi->mode == DSI_CMD_MODE)
|
if (mipi->mode == DSI_CMD_MODE)
|
||||||
mutex_unlock(&mdp5_data->ov_lock);
|
mutex_unlock(&mdp5_data->ov_lock);
|
||||||
mutex_unlock(&ctl->offlock);
|
|
||||||
mutex_unlock(&ctrl_pdata->mutex);
|
mutex_unlock(&ctrl_pdata->mutex);
|
||||||
pr_err("%s: DSI turning off, avoiding panel status check\n",
|
pr_err("%s: DSI turning off, avoiding panel status check\n",
|
||||||
__func__);
|
__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);
|
ret = ctrl_pdata->check_status(ctrl_pdata);
|
||||||
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
|
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
|
||||||
|
|
||||||
|
mutex_unlock(&ctl->offlock);
|
||||||
if (mipi->mode == DSI_CMD_MODE)
|
if (mipi->mode == DSI_CMD_MODE)
|
||||||
mutex_unlock(&mdp5_data->ov_lock);
|
mutex_unlock(&mdp5_data->ov_lock);
|
||||||
mutex_unlock(&ctl->offlock);
|
|
||||||
mutex_unlock(&ctrl_pdata->mutex);
|
mutex_unlock(&ctrl_pdata->mutex);
|
||||||
|
|
||||||
if ((pstatus_data->mfd->panel_power_state == MDSS_PANEL_POWER_ON)) {
|
if ((pstatus_data->mfd->panel_power_state == MDSS_PANEL_POWER_ON)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue