diff --git a/src/audio/chain_dma.c b/src/audio/chain_dma.c index 25672b3e7227..3882c38f700e 100644 --- a/src/audio/chain_dma.c +++ b/src/audio/chain_dma.c @@ -671,7 +671,7 @@ __cold static struct comp_dev *chain_task_create(const struct comp_driver *drv, rfree(cd); error: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -683,7 +683,7 @@ __cold static void chain_task_free(struct comp_dev *dev) chain_release(dev); rfree(cd); - rfree(dev); + comp_free_device(dev); } static const struct comp_driver comp_chain_dma = { diff --git a/src/audio/dai-legacy.c b/src/audio/dai-legacy.c index 6c99d2a80b25..11179334e6fe 100644 --- a/src/audio/dai-legacy.c +++ b/src/audio/dai-legacy.c @@ -196,7 +196,7 @@ static struct comp_dev *dai_new(const struct comp_driver *drv, dd = rzalloc(SOF_MEM_FLAG_USER | SOF_MEM_FLAG_COHERENT, sizeof(*dd)); if (!dd) { - rfree(dev); + comp_free_device(dev); return NULL; } @@ -211,7 +211,7 @@ static struct comp_dev *dai_new(const struct comp_driver *drv, error: rfree(dd); - rfree(dev); + comp_free_device(dev); return NULL; } @@ -248,7 +248,7 @@ static void dai_free(struct comp_dev *dev) dai_common_free(dd); rfree(dd); - rfree(dev); + comp_free_device(dev); } int dai_common_get_hw_params(struct dai_data *dd, struct comp_dev *dev, diff --git a/src/audio/dai-zephyr.c b/src/audio/dai-zephyr.c index 3c9229953cfc..e653e93ae082 100644 --- a/src/audio/dai-zephyr.c +++ b/src/audio/dai-zephyr.c @@ -589,7 +589,7 @@ __cold static struct comp_dev *dai_new(const struct comp_driver *drv, error: rfree(dd); e_data: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -630,7 +630,7 @@ __cold static void dai_free(struct comp_dev *dev) dai_common_free(dd); rfree(dd); - rfree(dev); + comp_free_device(dev); } int dai_common_get_hw_params(struct dai_data *dd, struct comp_dev *dev, diff --git a/src/audio/google/google_hotword_detect.c b/src/audio/google/google_hotword_detect.c index b495850f93d8..f7cf44f026fd 100644 --- a/src/audio/google/google_hotword_detect.c +++ b/src/audio/google/google_hotword_detect.c @@ -134,7 +134,7 @@ static struct comp_dev *ghd_create(const struct comp_driver *drv, ipc_msg_free(cd->msg); rfree(cd); fail: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -147,7 +147,7 @@ static void ghd_free(struct comp_dev *dev) comp_data_blob_handler_free(cd->model_handler); ipc_msg_free(cd->msg); rfree(cd); - rfree(dev); + comp_free_device(dev); } static int ghd_params(struct comp_dev *dev, diff --git a/src/audio/host-legacy.c b/src/audio/host-legacy.c index 891b68aae750..a16b3f74e1c3 100644 --- a/src/audio/host-legacy.c +++ b/src/audio/host-legacy.c @@ -593,7 +593,7 @@ static struct comp_dev *host_new(const struct comp_driver *drv, e_dev: rfree(hd); e_data: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -612,7 +612,7 @@ static void host_free(struct comp_dev *dev) comp_dbg(dev, "entry"); host_common_free(hd); rfree(hd); - rfree(dev); + comp_free_device(dev); } static int host_elements_reset(struct host_data *hd, struct comp_dev *dev) diff --git a/src/audio/host-zephyr.c b/src/audio/host-zephyr.c index a8f16e98c7b8..30cb465897ba 100644 --- a/src/audio/host-zephyr.c +++ b/src/audio/host-zephyr.c @@ -775,7 +775,7 @@ __cold static struct comp_dev *host_new(const struct comp_driver *drv, e_dev: rfree(hd); e_data: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -798,7 +798,7 @@ __cold static void host_free(struct comp_dev *dev) comp_dbg(dev, "entry"); host_common_free(hd); rfree(hd); - rfree(dev); + comp_free_device(dev); } static int host_elements_reset(struct host_data *hd, int direction) diff --git a/src/audio/kpb.c b/src/audio/kpb.c index a558794a75ed..9dca05630da1 100644 --- a/src/audio/kpb.c +++ b/src/audio/kpb.c @@ -501,7 +501,7 @@ static struct comp_dev *kpb_new(const struct comp_driver *drv, kpb = rzalloc(SOF_MEM_FLAG_USER, sizeof(*kpb)); if (!kpb) { - rfree(dev); + comp_free_device(dev); return NULL; } @@ -509,7 +509,7 @@ static struct comp_dev *kpb_new(const struct comp_driver *drv, ret = kpb_set_verify_ipc_params(dev, ipc_process); if (ret) { - rfree(dev); + comp_free_device(dev); return NULL; } @@ -544,7 +544,7 @@ static struct comp_dev *kpb_new(const struct comp_driver *drv, /* retrieve params from the base config for IPC4 */ ret = kpb_params(dev, ¶ms); if (ret < 0) { - rfree(dev); + comp_free_device(dev); return NULL; } #endif @@ -720,7 +720,7 @@ static void kpb_free(struct comp_dev *dev) /* Free KPB */ rfree(kpb); - rfree(dev); + comp_free_device(dev); } /** diff --git a/src/audio/selector/selector.c b/src/audio/selector/selector.c index 0e4b5b31d28f..40a4a2c5b888 100644 --- a/src/audio/selector/selector.c +++ b/src/audio/selector/selector.c @@ -163,7 +163,7 @@ static struct comp_dev *selector_new(const struct comp_driver *drv, cd = rzalloc(SOF_MEM_FLAG_USER, sizeof(*cd)); if (!cd) { - rfree(dev); + comp_free_device(dev); return NULL; } @@ -172,7 +172,7 @@ static struct comp_dev *selector_new(const struct comp_driver *drv, ret = memcpy_s(&cd->config, sizeof(cd->config), ipc_process->data, bs); if (ret) { rfree(cd); - rfree(dev); + comp_free_device(dev); return NULL; } @@ -191,7 +191,7 @@ static void selector_free(struct comp_dev *dev) comp_dbg(dev, "entry"); rfree(cd); - rfree(dev); + comp_free_device(dev); } /** diff --git a/src/audio/tone/tone-ipc3.c b/src/audio/tone/tone-ipc3.c index a98150f0865c..b2f153696c20 100644 --- a/src/audio/tone/tone-ipc3.c +++ b/src/audio/tone/tone-ipc3.c @@ -58,7 +58,7 @@ static struct comp_dev *tone_new(const struct comp_driver *drv, cd = rzalloc(SOF_MEM_FLAG_USER, sizeof(*cd)); if (!cd) { - rfree(dev); + comp_free_device(dev); return NULL; } @@ -82,7 +82,7 @@ static void tone_free(struct comp_dev *dev) comp_info(dev, "entry"); rfree(td); - rfree(dev); + comp_free_device(dev); } /* set component audio stream parameters */ diff --git a/src/include/sof/audio/component.h b/src/include/sof/audio/component.h index 720b5d7d6a4a..b6695b9cd312 100644 --- a/src/include/sof/audio/component.h +++ b/src/include/sof/audio/component.h @@ -892,6 +892,19 @@ static inline struct comp_dev *comp_alloc(const struct comp_driver *drv, size_t return dev; } +/** + * Frees memory allocated for component device. + * + * This is a counterpart to comp_alloc() and not to be confused with + * comp_free(). + * + * @param dev Pointer to the component device. + */ +static inline void comp_free_device(struct comp_dev *dev) +{ + sof_heap_free(dev->drv->user_heap, dev); +} + /** * \brief Module adapter associated with a component * @param dev Component device diff --git a/src/samples/audio/detect_test.c b/src/samples/audio/detect_test.c index 0d7abf47fd9c..35ed6ecd2011 100644 --- a/src/samples/audio/detect_test.c +++ b/src/samples/audio/detect_test.c @@ -766,7 +766,7 @@ static struct comp_dev *test_keyword_new(const struct comp_driver *drv, comp_data_blob_handler_free(cd->model_handler); rfree(cd); fail: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -788,7 +788,7 @@ static void test_keyword_free(struct comp_dev *dev) ipc_msg_free(cd->msg); comp_data_blob_handler_free(cd->model_handler); rfree(cd); - rfree(dev); + comp_free_device(dev); } static int test_keyword_verify_params(struct comp_dev *dev, diff --git a/src/samples/audio/smart_amp_test_ipc3.c b/src/samples/audio/smart_amp_test_ipc3.c index b047962e4e0d..3e69bb5f308e 100644 --- a/src/samples/audio/smart_amp_test_ipc3.c +++ b/src/samples/audio/smart_amp_test_ipc3.c @@ -88,7 +88,7 @@ static struct comp_dev *smart_amp_new(const struct comp_driver *drv, comp_data_blob_handler_free(sad->model_handler); rfree(sad); fail: - rfree(dev); + comp_free_device(dev); return NULL; } @@ -261,7 +261,7 @@ static void smart_amp_free(struct comp_dev *dev) comp_data_blob_handler_free(sad->model_handler); rfree(sad); - rfree(dev); + comp_free_device(dev); } static int smart_amp_verify_params(struct comp_dev *dev,