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

Commit b95e1016 authored by Skylar Chang's avatar Skylar Chang Committed by Gerrit - the friendly Code Review server
Browse files

msm: ipa3: fix a race condition on clock vote from suspend



There is a potential race condition where suspend interrupt
handling might be running from two different context in parallel.
Add a mutex to ensure mutual exclusion when voting for IPA clocks.

CRs-Fixed: 2037199
Change-Id: I7f14866696b6c9f5e239f3de2c4bad6991097ecb
Acked-by: default avatarAdy Abraham <adya@qti.qualcomm.com>
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent bb499534
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3680,6 +3680,7 @@ void ipa_suspend_handler(enum ipa_irq_type interrupt,
				 * pipe will be unsuspended as part of
				 * enabling IPA clocks
				 */
				mutex_lock(&ipa_ctx->sps_pm.sps_pm_lock);
				if (!atomic_read(
					&ipa_ctx->sps_pm.dec_clients)
					) {
@@ -3692,6 +3693,7 @@ void ipa_suspend_handler(enum ipa_irq_type interrupt,
						1);
					ipa_sps_process_irq_schedule_rel();
				}
				mutex_unlock(&ipa_ctx->sps_pm.sps_pm_lock);
			} else {
				resource = ipa2_get_rm_resource_from_ep(i);
				res = ipa_rm_request_resource_with_timer(
+4 −0
Original line number Diff line number Diff line
@@ -3747,6 +3747,8 @@ void ipa3_suspend_handler(enum ipa_irq_type interrupt,
				 * pipe will be unsuspended as part of
				 * enabling IPA clocks
				 */
				mutex_lock(&ipa3_ctx->transport_pm.
					transport_pm_mutex);
				if (!atomic_read(
					&ipa3_ctx->transport_pm.dec_clients)
					) {
@@ -3759,6 +3761,8 @@ void ipa3_suspend_handler(enum ipa_irq_type interrupt,
					1);
					ipa3_sps_process_irq_schedule_rel();
				}
				mutex_unlock(&ipa3_ctx->transport_pm.
					transport_pm_mutex);
			} else {
				resource = ipa3_get_rm_resource_from_ep(i);
				res =