From 092ce1cc5c37b63a30dc01338c435c8fe8c7d21f Mon Sep 17 00:00:00 2001 From: Soumya Managoli Date: Tue, 28 Dec 2021 16:09:05 +0530 Subject: [PATCH] ASoC: Unmap lab buffer during listen session close Ensure lab buffer de-alloc even if listen session is not in start state to avoid memory leak when multiple listen clients are created. Change-Id: Id6d8b37a3dcdf49618ae2a4d80903d429393cd8e Signed-off-by: Soumya Managoli --- asoc/msm-lsm-client.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/asoc/msm-lsm-client.c b/asoc/msm-lsm-client.c index fe461ffc5e5a..69768bc38e51 100644 --- a/asoc/msm-lsm-client.c +++ b/asoc/msm-lsm-client.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #include #include @@ -3092,14 +3093,6 @@ static int msm_lsm_close(struct snd_pcm_substream *substream) __func__, ret); prtd->lsm_client->lab_started = false; } - if (prtd->lsm_client->lab_buffer) { - ret = msm_lsm_lab_buffer_alloc(prtd, - LAB_BUFFER_DEALLOC); - if (ret) - dev_err(rtd->dev, - "%s: lab buffer dealloc failed ret %d\n", - __func__, ret); - } } if (!atomic_read(&prtd->read_abort)) { @@ -3120,6 +3113,15 @@ static int msm_lsm_close(struct snd_pcm_substream *substream) prtd->lsm_client->started = false; } + if (prtd->lsm_client->lab_enable && prtd->lsm_client->lab_buffer) { + ret = msm_lsm_lab_buffer_alloc(prtd, + LAB_BUFFER_DEALLOC); + if (ret) + dev_err(rtd->dev, + "%s: lab buffer dealloc failed ret %d\n", + __func__, ret); + } + /* * De-register existing sound models * to free SM and CAL buffer, even if