From ae351eefb68c98a37317a493162313d1b3374e14 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Thu, 4 Sep 2025 15:50:43 +0300 Subject: [PATCH 01/11] alloc: Add rmalloc_align() function Add rmalloc_align() function. The alignment is present in all alloc implementations used by rmalloc() so there is no reason not to provide it in the API. Signed-off-by: Jyri Sarha --- posix/include/rtos/alloc.h | 7 +++++++ zephyr/include/rtos/alloc.h | 6 ++++++ zephyr/lib/alloc.c | 15 +++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/posix/include/rtos/alloc.h b/posix/include/rtos/alloc.h index 7927f17394e5..7dbf070259ff 100644 --- a/posix/include/rtos/alloc.h +++ b/posix/include/rtos/alloc.h @@ -61,8 +61,15 @@ * Allocates memory block. * @param flags Flags, see SOF_MEM_FLAG_... * @param bytes Size in bytes. + * @param alignment Alignment in bytes. * @return Pointer to the allocated memory or NULL if failed. */ +void *rmalloc_align(uint32_t flags, size_t bytes, + uint32_t alignment); + +/** + * Similar to rmalloc_align(), but no alignment can be specified. + */ void *rmalloc(uint32_t flags, size_t bytes); /** diff --git a/zephyr/include/rtos/alloc.h b/zephyr/include/rtos/alloc.h index 0cf885ffe2ad..2738a0ac230b 100644 --- a/zephyr/include/rtos/alloc.h +++ b/zephyr/include/rtos/alloc.h @@ -52,9 +52,15 @@ * Allocates memory block. * @param flags Flags, see SOF_MEM_FLAG_.... * @param bytes Size in bytes. + * @param alignment Alignment in bytes. * @return Pointer to the allocated memory or NULL if failed. * */ +void *rmalloc_align(uint32_t flags, size_t bytes, uint32_t alignment); + +/** + * Similar to rmalloc_align(), but no alignment can be specified. + */ void *rmalloc(uint32_t flags, size_t bytes); /** diff --git a/zephyr/lib/alloc.c b/zephyr/lib/alloc.c index 2af0eb83397d..17d8d1a20af5 100644 --- a/zephyr/lib/alloc.c +++ b/zephyr/lib/alloc.c @@ -439,7 +439,7 @@ static void heap_free(struct k_heap *h, void *mem) } -void *rmalloc(uint32_t flags, size_t bytes) +void *rmalloc_align(uint32_t flags, size_t bytes, uint32_t alignment) { void *ptr; struct k_heap *heap; @@ -453,7 +453,7 @@ void *rmalloc(uint32_t flags, size_t bytes) tr_err(&zephyr_tr, "L3_HEAP available for cached addresses only!"); return NULL; } - ptr = (__sparse_force void *)l3_heap_alloc_aligned(heap, 0, bytes); + ptr = (__sparse_force void *)l3_heap_alloc_aligned(heap, alignment, bytes); return ptr; #else @@ -468,17 +468,24 @@ void *rmalloc(uint32_t flags, size_t bytes) } if (!(flags & SOF_MEM_FLAG_COHERENT)) { - ptr = (__sparse_force void *)heap_alloc_aligned_cached(heap, 0, bytes); + ptr = (__sparse_force void *)heap_alloc_aligned_cached(heap, alignment, bytes); } else { /* * XTOS alloc implementation has used dcache alignment, * so SOF application code is expecting this behaviour. */ - ptr = heap_alloc_aligned(heap, PLATFORM_DCACHE_ALIGN, bytes); + alignment = MAX(PLATFORM_DCACHE_ALIGN, alignment); + ptr = heap_alloc_aligned(heap, alignment, bytes); } return ptr; } +EXPORT_SYMBOL(rmalloc_align); + +void *rmalloc(uint32_t flags, size_t bytes) +{ + return rmalloc_align(flags, bytes, 0); +} EXPORT_SYMBOL(rmalloc); void *rbrealloc_align(void *ptr, uint32_t flags, size_t bytes, From 7cc4a3779d3616dab3c0cf225463888205b8dd5e Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Thu, 4 Sep 2025 21:09:04 +0300 Subject: [PATCH 02/11] cmocka: Prepare cmocka tests for rmalloc and rmalloc_align Prepare cmocka tests for rmalloc() and rmalloc_align(). Signed-off-by: Jyri Sarha --- test/cmocka/src/common_mocks.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/cmocka/src/common_mocks.c b/test/cmocka/src/common_mocks.c index cb116c5f8908..1450af20ddfd 100644 --- a/test/cmocka/src/common_mocks.c +++ b/test/cmocka/src/common_mocks.c @@ -63,10 +63,26 @@ void WEAK *rbrealloc_align(void *ptr, uint32_t flags, { (void)flags; (void)old_bytes; + (void)alignment; return realloc(ptr, bytes); } +void WEAK *rmalloc_align(uint32_t flags, size_t bytes, uint32_t alignment) +{ + (void)flags; + (void)alignment; + + return malloc(bytes); +} + +void WEAK *rmalloc(uint32_t flags, size_t bytes) +{ + (void)flags; + + return malloc(bytes); +} + void WEAK rfree(void *ptr) { free(ptr); From 66ce3580f115eecea84076d3f97a2bb21f4312cc Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Thu, 4 Sep 2025 21:33:09 +0300 Subject: [PATCH 03/11] testbench: library: Prepare for rmalloc_align() usage Prepare for rmalloc_align() usage. Signed-off-by: Jyri Sarha --- src/platform/library/lib/alloc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/platform/library/lib/alloc.c b/src/platform/library/lib/alloc.c index ec7667b351be..1a5b96b68d64 100644 --- a/src/platform/library/lib/alloc.c +++ b/src/platform/library/lib/alloc.c @@ -16,6 +16,11 @@ /* testbench mem alloc definition */ +void *rmalloc_align(uint32_t flags, size_t bytes, uint32_t alignment) +{ + return malloc(bytes); +} + void *rmalloc(uint32_t flags, size_t bytes) { return malloc(bytes); From e766d25e1b584983684a0a56d1cee93a5f2adbb5 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Wed, 3 Sep 2025 18:44:32 +0300 Subject: [PATCH 04/11] modules: alloc API: Use rmalloc() instead of rbmalloc() Forward mod_alloc() calls to rmalloc() instead of rbmalloc(). rballoc() calls are forwarded to virtual heap if it is enabled, but rmalloc() calls are not. The commit also removes if (alignment) condition, as rmalloc() will eventually end up to rmalloc_align() with zero alignment. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index f95299f952d8..c79f4759380d 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -185,10 +185,7 @@ void *mod_alloc_align(struct processing_module *mod, uint32_t size, uint32_t ali } /* Allocate memory for module */ - if (alignment) - ptr = rballoc_align(SOF_MEM_FLAG_USER, size, alignment); - else - ptr = rballoc(SOF_MEM_FLAG_USER, size); + ptr = rmalloc_align(SOF_MEM_FLAG_USER, size, alignment); if (!ptr) { comp_err(mod->dev, "failed to allocate memory."); From fda4ef77cd60c9dd07aca8a9e33ebf406479b26f Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Tue, 2 Sep 2025 17:23:52 +0300 Subject: [PATCH 05/11] modules: Better mod_alloc_align() failure prints Remove the remains of function name from the prints and in case of heap allocation failure, print all available related parameters. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index c79f4759380d..6546a5ec4781 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -188,7 +188,8 @@ void *mod_alloc_align(struct processing_module *mod, uint32_t size, uint32_t ali ptr = rmalloc_align(SOF_MEM_FLAG_USER, size, alignment); if (!ptr) { - comp_err(mod->dev, "failed to allocate memory."); + comp_err(mod->dev, "Failed to alloc %d bytes %d alignment for comp %x.", + size, alignment, dev_comp_id(mod->dev)); container_put(mod, container); return NULL; } From 7fffe2ce1f7f639001e691f350ae875a5cf0fc05 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Tue, 2 Sep 2025 11:58:01 +0300 Subject: [PATCH 06/11] ipc4: helper: Print module IDs as hex Print all module IDs hex for better readability. Signed-off-by: Jyri Sarha --- src/ipc/ipc4/helper.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ipc/ipc4/helper.c b/src/ipc/ipc4/helper.c index 511917ceb768..c35fc41ba364 100644 --- a/src/ipc/ipc4/helper.c +++ b/src/ipc/ipc4/helper.c @@ -581,7 +581,7 @@ __cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) buffer = ipc4_create_buffer(source, cross_core_bind, buf_size, bu->extension.r.src_queue, bu->extension.r.dst_queue); if (!buffer) { - tr_err(&ipc_tr, "failed to allocate buffer to bind %d to %d", src_id, sink_id); + tr_err(&ipc_tr, "failed to allocate buffer to bind %#x to %#x", src_id, sink_id); return IPC4_OUT_OF_MEMORY; } @@ -646,14 +646,14 @@ __cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) ret = comp_buffer_connect(source, source->ipc_config.core, buffer, PPL_CONN_DIR_COMP_TO_BUFFER); if (ret < 0) { - tr_err(&ipc_tr, "failed to connect src %d to internal buffer", src_id); + tr_err(&ipc_tr, "failed to connect src %#x to internal buffer", src_id); goto free; } ret = comp_buffer_connect(sink, sink->ipc_config.core, buffer, PPL_CONN_DIR_BUFFER_TO_COMP); if (ret < 0) { - tr_err(&ipc_tr, "failed to connect internal buffer to sink %d", sink_id); + tr_err(&ipc_tr, "failed to connect internal buffer to sink %#x", sink_id); goto e_sink_connect; } @@ -1043,7 +1043,7 @@ __cold const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id) mod = lib_manager_get_module_manifest(module_id); if (!mod) { - tr_err(&comp_tr, "Error: Couldn't find loadable module with id %d.", + tr_err(&comp_tr, "Error: Couldn't find loadable module with id %#x.", module_id); return NULL; } From 49f5d6e39cdd617b6518169ce1ed9dd3bbb2ce04 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Fri, 12 Sep 2025 16:10:13 +0300 Subject: [PATCH 07/11] modules: mod_alloc: mod_alloc size and alignment parameter to size_t Change mod_alloc_align and friends size and alignment parameters type to size_t. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 8 ++++---- src/include/sof/audio/module_adapter/module/generic.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index 6546a5ec4781..38d17ea2426a 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -168,7 +168,7 @@ static void container_put(struct processing_module *mod, struct module_resource * * The allocated memory is automatically freed when the module is unloaded. */ -void *mod_alloc_align(struct processing_module *mod, uint32_t size, uint32_t alignment) +void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignment) { struct module_resource *container = container_get(mod); struct module_resources *res = &mod->priv.resources; @@ -188,7 +188,7 @@ void *mod_alloc_align(struct processing_module *mod, uint32_t size, uint32_t ali ptr = rmalloc_align(SOF_MEM_FLAG_USER, size, alignment); if (!ptr) { - comp_err(mod->dev, "Failed to alloc %d bytes %d alignment for comp %x.", + comp_err(mod->dev, "Failed to alloc %zu bytes %zu alignment for comp %#x.", size, alignment, dev_comp_id(mod->dev)); container_put(mod, container); return NULL; @@ -216,7 +216,7 @@ EXPORT_SYMBOL(mod_alloc_align); * Like mod_alloc_align() but the alignment can not be specified. However, * rballoc() will always aligns the memory to PLATFORM_DCACHE_ALIGN. */ -void *mod_alloc(struct processing_module *mod, uint32_t size) +void *mod_alloc(struct processing_module *mod, size_t size) { return mod_alloc_align(mod, size, 0); } @@ -230,7 +230,7 @@ EXPORT_SYMBOL(mod_alloc); * * Like mod_alloc() but the allocated memory is initialized to zero. */ -void *mod_zalloc(struct processing_module *mod, uint32_t size) +void *mod_zalloc(struct processing_module *mod, size_t size) { void *ret = mod_alloc(mod, size); diff --git a/src/include/sof/audio/module_adapter/module/generic.h b/src/include/sof/audio/module_adapter/module/generic.h index 97e5d9b35520..e322632a653f 100644 --- a/src/include/sof/audio/module_adapter/module/generic.h +++ b/src/include/sof/audio/module_adapter/module/generic.h @@ -188,9 +188,9 @@ struct module_processing_data { /*****************************************************************************/ int module_load_config(struct comp_dev *dev, const void *cfg, size_t size); int module_init(struct processing_module *mod); -void *mod_alloc_align(struct processing_module *mod, uint32_t size, uint32_t alignment); -void *mod_alloc(struct processing_module *mod, uint32_t size); -void *mod_zalloc(struct processing_module *mod, uint32_t size); +void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignment); +void *mod_alloc(struct processing_module *mod, size_t size); +void *mod_zalloc(struct processing_module *mod, size_t size); int mod_free(struct processing_module *mod, const void *ptr); #if CONFIG_COMP_BLOB struct comp_data_blob_handler *mod_data_blob_handler_new(struct processing_module *mod); From efd41197b8253c30dfccd36ce502ea2be07ff31c Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Mon, 29 Sep 2025 00:01:52 +0300 Subject: [PATCH 08/11] module: Add mod_balloc() and mod_balloc_aling() functions Add mod_balloc() and mod_balloc_aling() to enable also automatically freed buffer memory allocations. The difference at the moment is that "buffers" are allocated from virtual heap, using rballoc() as a back-end, and other things are allocated from Zephyr heap assigned for user space shared memory, using rmalloc() as a back-end. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 68 ++++++++++++++++++- .../sof/audio/module_adapter/module/generic.h | 2 + 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index 38d17ea2426a..ba476e856dff 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -159,6 +159,71 @@ static void container_put(struct processing_module *mod, struct module_resource list_item_append(&container->list, &res->free_cont_list); } +/** + * Allocates aligned buffer memory block for module. + * @param mod Pointer to the module this memory block is allocatd for. + * @param bytes Size in bytes. + * @param alignment Alignment in bytes. + * @return Pointer to the allocated memory or NULL if failed. + * + * The allocated memory is automatically freed when the module is + * unloaded. The back-end, rballoc(), always aligns the memory to + * PLATFORM_DCACHE_ALIGN at the minimum. + */ +void *mod_balloc_align(struct processing_module *mod, size_t size, size_t alignment) +{ + struct module_resource *container = container_get(mod); + struct module_resources *res = &mod->priv.resources; + void *ptr; + + MEM_API_CHECK_THREAD(res); + if (!container) + return NULL; + + if (!size) { + comp_err(mod->dev, "requested allocation of 0 bytes."); + container_put(mod, container); + return NULL; + } + + /* Allocate buffer memory for module */ + ptr = rballoc_align(SOF_MEM_FLAG_USER, size, alignment); + + if (!ptr) { + comp_err(mod->dev, "Failed to alloc %zu bytes %zu alignment for comp %#x.", + size, alignment, dev_comp_id(mod->dev)); + container_put(mod, container); + return NULL; + } + /* Store reference to allocated memory */ + container->ptr = ptr; + container->size = size; + container->type = MOD_RES_HEAP; + list_item_prepend(&container->list, &res->res_list); + + res->heap_usage += size; + if (res->heap_usage > res->heap_high_water_mark) + res->heap_high_water_mark = res->heap_usage; + + return ptr; +} +EXPORT_SYMBOL(mod_balloc_align); + +/** + * Allocates buffer memory block for module. + * @param mod Pointer to module this memory block is allocated for. + * @param bytes Size in bytes. + * @return Pointer to the allocated memory or NULL if failed. + * + * Like mod_balloc_align() but the alignment can not be specified. However, + * rballoc() always aligns the memory to PLATFORM_DCACHE_ALIGN. + */ +void *mod_balloc(struct processing_module *mod, size_t size) +{ + return mod_balloc_align(mod, size, 0); +} +EXPORT_SYMBOL(mod_balloc); + /** * Allocates aligned memory block for module. * @param mod Pointer to the module this memory block is allocatd for. @@ -213,8 +278,7 @@ EXPORT_SYMBOL(mod_alloc_align); * @param bytes Size in bytes. * @return Pointer to the allocated memory or NULL if failed. * - * Like mod_alloc_align() but the alignment can not be specified. However, - * rballoc() will always aligns the memory to PLATFORM_DCACHE_ALIGN. + * Like mod_alloc_align() but the alignment can not be specified. */ void *mod_alloc(struct processing_module *mod, size_t size) { diff --git a/src/include/sof/audio/module_adapter/module/generic.h b/src/include/sof/audio/module_adapter/module/generic.h index e322632a653f..adb7005b0a9f 100644 --- a/src/include/sof/audio/module_adapter/module/generic.h +++ b/src/include/sof/audio/module_adapter/module/generic.h @@ -188,6 +188,8 @@ struct module_processing_data { /*****************************************************************************/ int module_load_config(struct comp_dev *dev, const void *cfg, size_t size); int module_init(struct processing_module *mod); +void *mod_balloc_align(struct processing_module *mod, size_t size, size_t alignment); +void *mod_balloc(struct processing_module *mod, size_t size); void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignment); void *mod_alloc(struct processing_module *mod, size_t size); void *mod_zalloc(struct processing_module *mod, size_t size); From 5b2b540cc02cb289b152a83d7f791d0a236c6001 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Tue, 30 Sep 2025 16:43:38 +0300 Subject: [PATCH 09/11] module: Move container_get() after MEM_API_CHECK_THREAD() Move container_get() after MEM_API_CHECK_THREAD(). This change may help debugging if container_get() crashes when memory API functions are called from wrong thread. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index ba476e856dff..b6a0b2276255 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -172,11 +172,13 @@ static void container_put(struct processing_module *mod, struct module_resource */ void *mod_balloc_align(struct processing_module *mod, size_t size, size_t alignment) { - struct module_resource *container = container_get(mod); struct module_resources *res = &mod->priv.resources; + struct module_resource *container; void *ptr; MEM_API_CHECK_THREAD(res); + + container = container_get(mod); if (!container) return NULL; @@ -235,11 +237,13 @@ EXPORT_SYMBOL(mod_balloc); */ void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignment) { - struct module_resource *container = container_get(mod); struct module_resources *res = &mod->priv.resources; + struct module_resource *container; void *ptr; MEM_API_CHECK_THREAD(res); + + container = container_get(mod); if (!container) return NULL; @@ -317,10 +321,12 @@ struct comp_data_blob_handler * mod_data_blob_handler_new(struct processing_module *mod) { struct module_resources *res = &mod->priv.resources; - struct module_resource *container = container_get(mod); struct comp_data_blob_handler *bhp; + struct module_resource *container; MEM_API_CHECK_THREAD(res); + + container = container_get(mod); if (!container) return NULL; @@ -351,10 +357,12 @@ EXPORT_SYMBOL(mod_data_blob_handler_new); const void *mod_fast_get(struct processing_module *mod, const void * const dram_ptr, size_t size) { struct module_resources *res = &mod->priv.resources; - struct module_resource *container = container_get(mod); + struct module_resource *container; const void *ptr; MEM_API_CHECK_THREAD(res); + + container = container_get(mod); if (!container) return NULL; From a719c1bf7b0d83f824633ecb21b0fc6948d898e1 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Tue, 30 Sep 2025 17:01:42 +0300 Subject: [PATCH 10/11] module: Make mod_balloc() and mod_alloc() inline functions Make mod_balloc() and mod_alloc() inline functions. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 29 ------------------- .../sof/audio/module_adapter/module/generic.h | 12 ++++++-- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index b6a0b2276255..b4b72264cd54 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -211,21 +211,6 @@ void *mod_balloc_align(struct processing_module *mod, size_t size, size_t alignm } EXPORT_SYMBOL(mod_balloc_align); -/** - * Allocates buffer memory block for module. - * @param mod Pointer to module this memory block is allocated for. - * @param bytes Size in bytes. - * @return Pointer to the allocated memory or NULL if failed. - * - * Like mod_balloc_align() but the alignment can not be specified. However, - * rballoc() always aligns the memory to PLATFORM_DCACHE_ALIGN. - */ -void *mod_balloc(struct processing_module *mod, size_t size) -{ - return mod_balloc_align(mod, size, 0); -} -EXPORT_SYMBOL(mod_balloc); - /** * Allocates aligned memory block for module. * @param mod Pointer to the module this memory block is allocatd for. @@ -276,20 +261,6 @@ void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignme } EXPORT_SYMBOL(mod_alloc_align); -/** - * Allocates memory block for module. - * @param mod Pointer to module this memory block is allocated for. - * @param bytes Size in bytes. - * @return Pointer to the allocated memory or NULL if failed. - * - * Like mod_alloc_align() but the alignment can not be specified. - */ -void *mod_alloc(struct processing_module *mod, size_t size) -{ - return mod_alloc_align(mod, size, 0); -} -EXPORT_SYMBOL(mod_alloc); - /** * Allocates memory block for module and initializes it to zero. * @param mod Pointer to module this memory block is allocated for. diff --git a/src/include/sof/audio/module_adapter/module/generic.h b/src/include/sof/audio/module_adapter/module/generic.h index adb7005b0a9f..9ee0656b0ee7 100644 --- a/src/include/sof/audio/module_adapter/module/generic.h +++ b/src/include/sof/audio/module_adapter/module/generic.h @@ -189,9 +189,17 @@ struct module_processing_data { int module_load_config(struct comp_dev *dev, const void *cfg, size_t size); int module_init(struct processing_module *mod); void *mod_balloc_align(struct processing_module *mod, size_t size, size_t alignment); -void *mod_balloc(struct processing_module *mod, size_t size); +static inline void *mod_balloc(struct processing_module *mod, size_t size) +{ + return mod_balloc_align(mod, size, 0); +} + void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignment); -void *mod_alloc(struct processing_module *mod, size_t size); +static inline void *mod_alloc(struct processing_module *mod, size_t size) +{ + return mod_alloc_align(mod, size, 0); +} + void *mod_zalloc(struct processing_module *mod, size_t size); int mod_free(struct processing_module *mod, const void *ptr); #if CONFIG_COMP_BLOB From dbe5520151020f0bc4de1118bf47d979e32587f0 Mon Sep 17 00:00:00 2001 From: Jyri Sarha Date: Tue, 30 Sep 2025 17:55:24 +0300 Subject: [PATCH 11/11] module: Make mod_zalloc() inline function Make mod_zalloc() inline function. Signed-off-by: Jyri Sarha --- src/audio/module_adapter/module/generic.c | 19 ------------------- .../sof/audio/module_adapter/module/generic.h | 11 ++++++++++- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index b4b72264cd54..f77377a54cea 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -261,25 +261,6 @@ void *mod_alloc_align(struct processing_module *mod, size_t size, size_t alignme } EXPORT_SYMBOL(mod_alloc_align); -/** - * Allocates memory block for module and initializes it to zero. - * @param mod Pointer to module this memory block is allocated for. - * @param bytes Size in bytes. - * @return Pointer to the allocated memory or NULL if failed. - * - * Like mod_alloc() but the allocated memory is initialized to zero. - */ -void *mod_zalloc(struct processing_module *mod, size_t size) -{ - void *ret = mod_alloc(mod, size); - - if (ret) - memset(ret, 0, size); - - return ret; -} -EXPORT_SYMBOL(mod_zalloc); - /** * Creates a blob handler and releases it when the module is unloaded * @param mod Pointer to module this memory block is allocated for. diff --git a/src/include/sof/audio/module_adapter/module/generic.h b/src/include/sof/audio/module_adapter/module/generic.h index 9ee0656b0ee7..82430a017204 100644 --- a/src/include/sof/audio/module_adapter/module/generic.h +++ b/src/include/sof/audio/module_adapter/module/generic.h @@ -200,7 +200,16 @@ static inline void *mod_alloc(struct processing_module *mod, size_t size) return mod_alloc_align(mod, size, 0); } -void *mod_zalloc(struct processing_module *mod, size_t size); +static inline void *mod_zalloc(struct processing_module *mod, size_t size) +{ + void *ret = mod_alloc(mod, size); + + if (ret) + memset(ret, 0, size); + + return ret; +} + int mod_free(struct processing_module *mod, const void *ptr); #if CONFIG_COMP_BLOB struct comp_data_blob_handler *mod_data_blob_handler_new(struct processing_module *mod);