From 6b5e14d72dd49eba5189b6ef76e94845dab1bbdb Mon Sep 17 00:00:00 2001 From: Harshal Ahire Date: Wed, 20 Nov 2019 21:17:26 +0530 Subject: [PATCH] dsp: Add cmd locks to fix synchronization issues Add mutex locks in q6core_send_get_avcs_fwk_ver_cmd() and q6core_map_mdf_shared_memory() functions to fix command-response synchronization issues in race conditions. Change-Id: Ibdf6788b51965bd37245c611683102c600ca8eb4 Signed-off-by: Harshal Ahire --- dsp/q6core.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dsp/q6core.c b/dsp/q6core.c index 68fe9e5fb749..15c00bdec764 100644 --- a/dsp/q6core.c +++ b/dsp/q6core.c @@ -502,6 +502,7 @@ static int q6core_send_get_avcs_fwk_ver_cmd(void) struct apr_hdr avcs_ver_cmd; int ret; + mutex_lock(&q6core_lcl.cmd_lock); avcs_ver_cmd.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD, APR_HDR_LEN(APR_HDR_SIZE), APR_PKT_VER); @@ -548,6 +549,7 @@ static int q6core_send_get_avcs_fwk_ver_cmd(void) ret = 0; done: + mutex_unlock(&q6core_lcl.cmd_lock); return ret; } @@ -1428,14 +1430,16 @@ int q6core_map_mdf_shared_memory(uint32_t map_handle, uint64_t *buf_add, int i = 0; int cmd_size = 0; + mutex_lock(&q6core_lcl.cmd_lock); cmd_size = sizeof(struct avs_cmd_map_mdf_shared_memory) + sizeof(struct avs_shared_map_region_payload) * bufcnt; mmap_region_cmd = kzalloc(cmd_size, GFP_KERNEL); - if (mmap_region_cmd == NULL) + if (mmap_region_cmd == NULL) { + mutex_unlock(&q6core_lcl.cmd_lock); return -ENOMEM; - + } mmap_regions = (struct avs_cmd_map_mdf_shared_memory *)mmap_region_cmd; mmap_regions->hdr.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD, APR_HDR_LEN(APR_HDR_SIZE), @@ -1502,6 +1506,7 @@ int q6core_map_mdf_shared_memory(uint32_t map_handle, uint64_t *buf_add, done: kfree(mmap_region_cmd); + mutex_unlock(&q6core_lcl.cmd_lock); return ret; }