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

Commit e815a545 authored by Dhaval Patel's avatar Dhaval Patel
Browse files

msm: mdss: handle race condition between ov_off and ov_commit



Handle race condition between ov_off and ov_commit by
acquiring the ov_lock in off API. This gives the exclusive
behavior between ov_off and ov_commit call.

Change-Id: Iaa13f9e5991a53feff12b8efaec497cae49d28d1
Signed-off-by: default avatarDhaval Patel <pdhaval@codeaurora.org>
parent 88af6688
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3190,6 +3190,8 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd)
		mdss_mdp_ctl_restore(mdp5_data->ctl);
	}

	mutex_lock(&mdp5_data->ov_lock);

	mdss_mdp_overlay_free_fb_pipe(mfd);

	mixer = mdss_mdp_mixer_get(mdp5_data->ctl, MDSS_MDP_MIXER_MUX_LEFT);
@@ -3203,12 +3205,14 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd)
	mutex_lock(&mdp5_data->list_lock);
	need_cleanup = !list_empty(&mdp5_data->pipes_cleanup);
	mutex_unlock(&mdp5_data->list_lock);
	mutex_unlock(&mdp5_data->ov_lock);

	if (need_cleanup) {
		pr_debug("cleaning up pipes on fb%d\n", mfd->index);
		mdss_mdp_overlay_kickoff(mfd, NULL);
	}

	mutex_lock(&mdp5_data->ov_lock);
	rc = mdss_mdp_ctl_stop(mdp5_data->ctl);
	if (rc == 0) {
		mutex_lock(&mdp5_data->list_lock);
@@ -3230,6 +3234,7 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd)
		if (rc)
			pr_err("unable to suspend w/pm_runtime_put (%d)\n", rc);
	}
	mutex_unlock(&mdp5_data->ov_lock);

	return rc;
}