Merge "msm: kgsl: Protect the memdesc->gpuaddr in SVM use cases"
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_pm.c b/drivers/platform/msm/ipa/ipa_v3/ipa_pm.c
index 140afa8..e244a19 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_pm.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_pm.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2017-2018, 2020 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -1220,14 +1220,15 @@
return -EINVAL;
}
+ mutex_lock(&ipa_pm_ctx->client_mutex);
if (hdl >= IPA_PM_MAX_CLIENTS || ipa_pm_ctx->clients[hdl] == NULL
|| throughput < 0) {
IPA_PM_ERR("Invalid Params\n");
+ mutex_unlock(&ipa_pm_ctx->client_mutex);
return -EINVAL;
}
client = ipa_pm_ctx->clients[hdl];
- mutex_lock(&ipa_pm_ctx->client_mutex);
if (client->group == IPA_PM_GROUP_DEFAULT)
IPA_PM_DBG_LOW("Old throughput: %d\n", client->throughput);
else
@@ -1246,14 +1247,16 @@
client->group, ipa_pm_ctx->group_tput[client->group]);
mutex_unlock(&ipa_pm_ctx->client_mutex);
- spin_lock_irqsave(&client->state_lock, flags);
- if (IPA_PM_STATE_ACTIVE(client->state) || (client->group !=
+ if (ipa_pm_ctx->clients[hdl]) {
+ spin_lock_irqsave(&client->state_lock, flags);
+ if (IPA_PM_STATE_ACTIVE(client->state) || (client->group !=
IPA_PM_GROUP_DEFAULT)) {
+ spin_unlock_irqrestore(&client->state_lock, flags);
+ do_clk_scaling();
+ return 0;
+ }
spin_unlock_irqrestore(&client->state_lock, flags);
- do_clk_scaling();
- return 0;
}
- spin_unlock_irqrestore(&client->state_lock, flags);
return 0;
}