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

Commit 633d0949 authored by Veera Sundaram Sankaran's avatar Veera Sundaram Sankaran
Browse files

msm: mdss: fix possible race condition in mdp resource control



There might be a race condition where the early wake-up work item gets
preempted for the stop call when the resource state is already set to
off by the early wake-up. In this condition, the stop call clears the
ctx, leading to issues when the early wake-up work item runs again since
the ctx is not valid any more. Fix this condition by making sure that
stop call always waits for the early wake-up work item to finish.

Change-Id: I64aba71bb4c5602df9a524b77bd8bf3296dda012
Signed-off-by: default avatarVeera Sundaram Sankaran <veeras@codeaurora.org>
parent 193d7f5c
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -731,6 +731,10 @@ int mdss_mdp_resource_control(struct mdss_mdp_ctl *ctl, u32 sw_event)
		break;
	case MDP_RSRC_CTL_EVENT_STOP:

		/* Cancel early wakeup Work Item */
		if (cancel_work_sync(&ctx->early_wakeup_clk_work))
			pr_debug("early wakeup work canceled\n");

		/* If we are already OFF, just return */
		if (mdp5_data->resources_state ==
				MDP_RSRC_CTL_STATE_OFF) {
@@ -777,10 +781,6 @@ int mdss_mdp_resource_control(struct mdss_mdp_ctl *ctl, u32 sw_event)
					__func__);
		}

		/* Cancel early wakeup Work Item */
		if (cancel_work_sync(&ctx->early_wakeup_clk_work))
			pr_debug("early wakeup work canceled\n");

		mutex_lock(&ctl->rsrc_lock);
		MDSS_XLOG(ctl->num, mdp5_data->resources_state, sw_event, 0x33);
		if ((mdp5_data->resources_state == MDP_RSRC_CTL_STATE_ON) ||