From e38e6af8db332d2d9733555d36cc0cfec6bd3825 Mon Sep 17 00:00:00 2001 From: Sree Sesha Aravind Vadrevu Date: Tue, 16 Apr 2013 14:02:21 -0700 Subject: msm: mdss: Avoid potential deadlock scenarios Ensuring that deadlocks are prevented by clearing locks in all paths of execution. Change-Id: Ia79f9449c4b040366fa4ed21776c9442bd6fdda3 Signed-off-by: Sree Sesha Aravind Vadrevu --- drivers/video/fbdev/msm/mdss_mdp_overlay.c | 15 +++++++++------ drivers/video/fbdev/msm/mdss_mdp_pipe.c | 10 ++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 7d25287262e0..48bab7fb2eb3 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -842,12 +842,13 @@ static int mdss_mdp_overlay_unset(struct msm_fb_data_type *mfd, int ndx) if (ndx == BORDERFILL_NDX) { pr_debug("borderfill disable\n"); mdp5_data->borderfill_enable = false; - return 0; + ret = 0; + goto done; } if (!mfd->panel_power_on) { - mutex_unlock(&mdp5_data->ov_lock); - return -EPERM; + ret = -EPERM; + goto done; } pr_debug("unset ndx=%x\n", ndx); @@ -857,6 +858,7 @@ static int mdss_mdp_overlay_unset(struct msm_fb_data_type *mfd, int ndx) else ret = mdss_mdp_overlay_release(mfd, ndx); +done: mutex_unlock(&mdp5_data->ov_lock); return ret; @@ -998,14 +1000,14 @@ static int mdss_mdp_overlay_play(struct msm_fb_data_type *mfd, return ret; if (!mfd->panel_power_on) { - mutex_unlock(&mdp5_data->ov_lock); - return -EPERM; + ret = -EPERM; + goto done; } ret = mdss_mdp_overlay_start(mfd); if (ret) { pr_err("unable to start overlay %d (%d)\n", mfd->index, ret); - return ret; + goto done; } if (req->id & MDSS_MDP_ROT_SESSION_MASK) { @@ -1018,6 +1020,7 @@ static int mdss_mdp_overlay_play(struct msm_fb_data_type *mfd, ret = mdss_mdp_overlay_queue(mfd, req); } +done: mutex_unlock(&mdp5_data->ov_lock); return ret; diff --git a/drivers/video/fbdev/msm/mdss_mdp_pipe.c b/drivers/video/fbdev/msm/mdss_mdp_pipe.c index 302acc7c950e..0f6553049b6a 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pipe.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pipe.c @@ -331,14 +331,16 @@ struct mdss_mdp_pipe *mdss_mdp_pipe_get(struct mdss_data_type *mdata, u32 ndx) mutex_lock(&mdss_mdp_sspp_lock); pipe = mdss_mdp_pipe_search(mdata, ndx); - if (!pipe) - return ERR_PTR(-EINVAL); + if (!pipe) { + pipe = ERR_PTR(-EINVAL); + goto error; + } if (mdss_mdp_pipe_map(pipe)) - return ERR_PTR(-EACCES); + pipe = ERR_PTR(-EACCES); +error: mutex_unlock(&mdss_mdp_sspp_lock); - return pipe; } -- cgit v1.2.3