summaryrefslogtreecommitdiff
path: root/drivers/soc
diff options
context:
space:
mode:
authorRamprasad Katkam <katkam@codeaurora.org>2017-05-17 13:21:57 +0530
committerRamprasad Katkam <katkam@codeaurora.org>2017-05-18 21:59:39 +0530
commit8f0c7ae73c205b9a1cfc685cbee9cb4ba437a554 (patch)
treec53926bb27a1eb8b6c2ecfebd10a4f0eca709b8b /drivers/soc
parent3d82d66409abb91539bcb9d1f343fcb9d583f2b4 (diff)
ASoC: APR: Fix missing APR deregister from asm
APR deregister is to be called for two ports from both q6asm_callback(during RESET) and q6asm_audio_client_free. In race condition between the two, APR deregister is called only for one port. The mismatch in apr register-deregister count causes apr not to reset service after ssr, causing APR communication failure. Change-Id: Ibd0528215bf2fb986eda03ae0d683b2af31358fe Signed-off-by: Ramprasad Katkam <katkam@codeaurora.org>
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/qcom/qdsp6v2/apr.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/soc/qcom/qdsp6v2/apr.c b/drivers/soc/qcom/qdsp6v2/apr.c
index a275537d4e08..2da8731c5753 100644
--- a/drivers/soc/qcom/qdsp6v2/apr.c
+++ b/drivers/soc/qcom/qdsp6v2/apr.c
@@ -745,13 +745,14 @@ int apr_deregister(void *handle)
if (!handle)
return -EINVAL;
+ mutex_lock(&svc->m_lock);
if (!svc->svc_cnt) {
pr_err("%s: svc already deregistered. svc = %pK\n",
__func__, svc);
+ mutex_unlock(&svc->m_lock);
return -EINVAL;
}
- mutex_lock(&svc->m_lock);
dest_id = svc->dest_id;
client_id = svc->client_id;
clnt = &client[dest_id][client_id];