summaryrefslogtreecommitdiff
path: root/drivers/platform
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-05-02 19:30:28 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-05-02 19:30:28 -0700
commit199c942a22b3ef6be16d0185701184e2dcbd5ea1 (patch)
treeacc6ab4c64f6a39c3f2cfaa27f9186b41d98683a /drivers/platform
parent79fecc9a9aedc93ea5a51efce3420e812a94f6c7 (diff)
parentc3646075c203bb2e47a600b4e3f24627b4c1f8d7 (diff)
Merge "msm: ipa3: fix a race condition on clock vote from suspend"
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/msm/ipa/ipa_v2/ipa.c2
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa.c4
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa.c b/drivers/platform/msm/ipa/ipa_v2/ipa.c
index f01743d04e84..0629d6bca49a 100644
--- a/drivers/platform/msm/ipa/ipa_v2/ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v2/ipa.c
@@ -3685,6 +3685,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)
) {
@@ -3697,6 +3698,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(
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c
index 5ee6e5d2d9e3..5a7a0e5000b9 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c
@@ -3614,6 +3614,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)
) {
@@ -3626,6 +3628,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 =