Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eacdc4a5 authored by Jayant Shekhar's avatar Jayant Shekhar Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarJayant Shekhar <jshekhar@codeaurora.org>
parent 0191ccd5
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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;
		}
	}