diff --git a/drivers/video/msm/mdss/mdss_mdp_overlay.c b/drivers/video/msm/mdss/mdss_mdp_overlay.c index c4d80d5a3abf7fc0c33405fe2a38433691abbbce..555f0cc5bf666735e542a7ff77194d144fb01b47 100644 --- a/drivers/video/msm/mdss/mdss_mdp_overlay.c +++ b/drivers/video/msm/mdss/mdss_mdp_overlay.c @@ -1802,6 +1802,7 @@ static void mdss_mdp_overlay_pan_display(struct msm_fb_data_type *mfd, if (is_mdss_iommu_attached()) { if (!mfd->iova) { pr_err("mfd iova is zero\n"); + mdss_mdp_pipe_unmap(pipe); goto attach_err; } buf->p[0].addr = mfd->iova; diff --git a/drivers/video/msm/mdss/mdss_mdp_pp.c b/drivers/video/msm/mdss/mdss_mdp_pp.c index 11d82eb0889351a926a333ec0437df1b4cc7e4f3..672de9ece2532eb2c20c4c82735e600f39f2f712 100644 --- a/drivers/video/msm/mdss/mdss_mdp_pp.c +++ b/drivers/video/msm/mdss/mdss_mdp_pp.c @@ -3243,9 +3243,10 @@ int mdss_mdp_hist_start(struct mdp_histogram_start_req *req) pipe = mdss_mdp_pipe_get(mdata, BIT(i)); if (IS_ERR_OR_NULL(pipe)) continue; - if (!pipe || pipe->num > MDSS_MDP_SSPP_VIG2) { + if (pipe->num > MDSS_MDP_SSPP_VIG2) { ret = -EINVAL; pr_warn("Invalid Hist pipe (%d)", i); + mdss_mdp_pipe_unmap(pipe); goto hist_stop_clk; } hist_info = &pipe->pp_res.hist; @@ -3343,8 +3344,11 @@ int mdss_mdp_hist_stop(u32 block) if (!PP_ARG(i, block)) continue; pipe = mdss_mdp_pipe_get(mdata, BIT(i)); - if (IS_ERR_OR_NULL(pipe) || - pipe->num > MDSS_MDP_SSPP_VIG2) { + if (IS_ERR_OR_NULL(pipe)) { + pr_warn("Invalid Hist pipe (%d)", i); + continue; + } else if (pipe->num > MDSS_MDP_SSPP_VIG2) { + mdss_mdp_pipe_unmap(pipe); pr_warn("Invalid Hist pipe (%d)", i); continue; } @@ -3735,8 +3739,11 @@ int mdss_mdp_hist_collect(struct mdp_histogram_data *hist) continue; pipe_cnt++; pipe = mdss_mdp_pipe_get(mdata, BIT(i)); - if (IS_ERR_OR_NULL(pipe) || - pipe->num > MDSS_MDP_SSPP_VIG2) { + if (IS_ERR_OR_NULL(pipe)) { + pr_warn("Invalid Hist pipe (%d)", i); + continue; + } else if (pipe->num > MDSS_MDP_SSPP_VIG2) { + mdss_mdp_pipe_unmap(pipe); pr_warn("Invalid Hist pipe (%d)", i); continue; } @@ -3744,14 +3751,18 @@ int mdss_mdp_hist_collect(struct mdp_histogram_data *hist) spin_lock_irqsave(&hist_info->hist_lock, flag); hist_info->read_request = 1; spin_unlock_irqrestore(&hist_info->hist_lock, flag); + mdss_mdp_pipe_unmap(pipe); } for (i = pipe_num; i < MDSS_PP_ARG_NUM; i++) { if (!PP_ARG(i, hist->block)) continue; pipe_cnt++; pipe = mdss_mdp_pipe_get(mdata, BIT(i)); - if (IS_ERR_OR_NULL(pipe) || - pipe->num > MDSS_MDP_SSPP_VIG2) { + if (IS_ERR_OR_NULL(pipe)) { + pr_warn("Invalid Hist pipe (%d)", i); + continue; + } else if (pipe->num > MDSS_MDP_SSPP_VIG2) { + mdss_mdp_pipe_unmap(pipe); pr_warn("Invalid Hist pipe (%d)", i); continue; } @@ -3769,8 +3780,11 @@ int mdss_mdp_hist_collect(struct mdp_histogram_data *hist) continue; pipe_cnt++; pipe = mdss_mdp_pipe_get(mdata, BIT(i)); - if (IS_ERR_OR_NULL(pipe) || - pipe->num > MDSS_MDP_SSPP_VIG2) { + if (IS_ERR_OR_NULL(pipe)) { + pr_warn("Invalid Hist pipe (%d)", i); + continue; + } else if (pipe->num > MDSS_MDP_SSPP_VIG2) { + mdss_mdp_pipe_unmap(pipe); pr_warn("Invalid Hist pipe (%d)", i); continue; } @@ -3779,6 +3793,7 @@ int mdss_mdp_hist_collect(struct mdp_histogram_data *hist) hist_info->read_request = 0; INIT_COMPLETION(hist_info->comp); spin_unlock_irqrestore(&hist_info->hist_lock, flag); + mdss_mdp_pipe_unmap(pipe); } if (ret || temp_ret) { ret = ret ? ret : temp_ret; @@ -3806,6 +3821,10 @@ int mdss_mdp_hist_collect(struct mdp_histogram_data *hist) if (!PP_ARG(i, hist->block)) continue; pipe = mdss_mdp_pipe_get(mdata, BIT(i)); + if (IS_ERR_OR_NULL(pipe)) { + pr_warn("Invalid Hist pipe (%d)", i); + continue; + } hist_info = &pipe->pp_res.hist; off = HIST_V_SIZE * i; mutex_lock(&hist_info->hist_mutex);