diff options
| author | Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org> | 2013-04-16 14:02:21 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:16:18 -0700 |
| commit | e38e6af8db332d2d9733555d36cc0cfec6bd3825 (patch) | |
| tree | c351405a1508d3377150d5cbcb189a956bd35db3 | |
| parent | ed71ce6512d2d7a490c3e5eb36318241b3b67765 (diff) | |
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 <svadrevu@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 15 | ||||
| -rw-r--r-- | 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; } |
