From 3b7c593e88e7df25f93ffe65225bf4b9ae03ce22 Mon Sep 17 00:00:00 2001 From: Jayant Shekhar Date: Mon, 28 Sep 2015 13:50:04 +0530 Subject: [PATCH] msm: mdss: Ensure remove vsync handler called during ctl stop With current implementation, vsync handler is never removed in case of shell stop if the call doesn't come from HAL. Due to this in certain cases the vsync ref count is unbalanced. MDP driver should ensure that the vsync handler is always removed explicitly during shell stop. Fix this issue by using separate variable for SLAVE ctx and using MASTER ctx for removing vsync handler. Change-Id: I281b9db0623f9760efea5b2ceb978e648083f156 Signed-off-by: Jayant Shekhar --- drivers/video/fbdev/msm/mdss_mdp_intf_video.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c index 7ffb27c3cc75..024d0a94eeed 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c @@ -497,7 +497,7 @@ static int mdss_mdp_video_intfs_stop(struct mdss_mdp_ctl *ctl, { struct mdss_data_type *mdata; struct mdss_panel_info *pinfo; - struct mdss_mdp_video_ctx *ctx; + struct mdss_mdp_video_ctx *ctx, *sctx = NULL; struct mdss_mdp_vsync_handler *tmp, *handle; int ret = 0; @@ -525,18 +525,18 @@ static int mdss_mdp_video_intfs_stop(struct mdss_mdp_ctl *ctl, if (is_pingpong_split(ctl->mfd)) { pinfo = &pdata->next->panel_info; - ctx = (struct mdss_mdp_video_ctx *) ctl->intf_ctx[SLAVE_CTX]; - if (!ctx->ref_cnt) { + sctx = (struct mdss_mdp_video_ctx *) ctl->intf_ctx[SLAVE_CTX]; + if (!sctx->ref_cnt) { pr_err("Intf %d not in use\n", (inum + MDSS_MDP_INTF0)); return -ENODEV; } pr_debug("stop ctl=%d video Intf #%d base=%p", ctl->num, - ctx->intf_num, ctx->base); + sctx->intf_num, sctx->base); - ret = mdss_mdp_video_ctx_stop(ctl, pinfo, ctx); + ret = mdss_mdp_video_ctx_stop(ctl, pinfo, sctx); if (ret) { pr_err("mdss_mdp_video_ctx_stop failed for intf: %d", - ctx->intf_num); + sctx->intf_num); return -EPERM; } }