summaryrefslogtreecommitdiff
path: root/sound/soc/fsl/fsl_dsp_proxy.c
diff options
context:
space:
mode:
authorZhang Peng <peng.zhang_8@nxp.com>2020-11-12 15:08:42 +0800
committerZhang Peng <peng.zhang_8@nxp.com>2020-11-13 09:30:24 +0800
commit5761a1aa23eb36d8521eeeb64cbcb4cdf2bec208 (patch)
treeb8039a5c371fd956a917d1f102a253e24ce58314 /sound/soc/fsl/fsl_dsp_proxy.c
parent73408def6ab0b54dc247efc48a13b64ea37bade3 (diff)
MLK-24966 ASoC: fsl_dsp: Fix kernel crash when DSP has no response
When DSP has no response with cplay and try to force exit, kernel met crash. Reason is kernel locks a mutex proxy->lock twice then kernel crash. Use MU_SendMessageTimeout instead MU_SendMessage then kernel can release the mutex. Signed-off-by: Zhang Peng <peng.zhang_8@nxp.com>
Diffstat (limited to 'sound/soc/fsl/fsl_dsp_proxy.c')
-rw-r--r--sound/soc/fsl/fsl_dsp_proxy.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sound/soc/fsl/fsl_dsp_proxy.c b/sound/soc/fsl/fsl_dsp_proxy.c
index 73e6e4cb6147..d907b9d077dc 100644
--- a/sound/soc/fsl/fsl_dsp_proxy.c
+++ b/sound/soc/fsl/fsl_dsp_proxy.c
@@ -144,7 +144,7 @@ u32 icm_intr_send(struct xf_proxy *proxy, u32 msg)
struct fsl_dsp *dsp_priv = container_of(proxy,
struct fsl_dsp, proxy);
- MU_SendMessage(dsp_priv->mu_base_virtaddr, 0, msg);
+ MU_SendMessageTimeout(dsp_priv->mu_base_virtaddr, 0, msg, 800);
return 0;
}
@@ -161,9 +161,9 @@ int icm_intr_extended_send(struct xf_proxy *proxy,
if (msghdr.size != 8)
dev_err(dev, "too much ext msg\n");
- MU_SendMessage(dsp_priv->mu_base_virtaddr, 1, ext_msg->phys);
- MU_SendMessage(dsp_priv->mu_base_virtaddr, 2, ext_msg->size);
- MU_SendMessage(dsp_priv->mu_base_virtaddr, 0, msg);
+ MU_SendMessageTimeout(dsp_priv->mu_base_virtaddr, 1, ext_msg->phys, 800);
+ MU_SendMessageTimeout(dsp_priv->mu_base_virtaddr, 2, ext_msg->size, 800);
+ MU_SendMessageTimeout(dsp_priv->mu_base_virtaddr, 0, msg, 800);
return 0;
}