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

Commit 0d06bb1c authored by Skylar Chang's avatar Skylar Chang
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 ed98af78
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3679,6 +3679,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)
					) {
@@ -3691,6 +3692,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
@@ -3620,6 +3620,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)
					) {
@@ -3632,6 +3634,8 @@ void ipa3_suspend_handler(enum ipa_irq_type interrupt,
					1);
					ipa3_process_irq_schedule_rel();
				}
				mutex_unlock(&ipa3_ctx->transport_pm.
					transport_pm_mutex);
			} else {
				resource = ipa3_get_rm_resource_from_ep(i);
				res =