@@ -280,31 +280,27 @@ static int lib_manager_unload_libcode_modules(const uint32_t module_id)
280280}
281281#endif /* CONFIG_LIBCODE_MODULE_SUPPORT */
282282
283- static void __sparse_cache * lib_manager_get_instance_bss_address (uint32_t module_id ,
284- uint32_t instance_id ,
285- const struct sof_man_module * mod )
283+ static void lib_manager_get_instance_bss_address (uint32_t instance_id ,
284+ const struct sof_man_module * mod ,
285+ void __sparse_cache * * va_addr , size_t * size )
286286{
287- uint32_t instance_bss_size =
288- mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count ;
289- uint32_t inst_offset = instance_bss_size * PAGE_SZ * instance_id ;
290- void __sparse_cache * va_base =
291- (void __sparse_cache * )(mod -> segment [SOF_MAN_SEGMENT_BSS ].v_base_addr +
292- inst_offset );
293-
294- tr_dbg (& lib_manager_tr , "instance_bss_size: %#x, pointer: %p" ,
295- instance_bss_size , (__sparse_force void * )va_base );
296-
297- return va_base ;
287+ * size = mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count *
288+ PAGE_SZ ;
289+ size_t inst_offset = * size * instance_id ;
290+ * va_addr = (void __sparse_cache * )(mod -> segment [SOF_MAN_SEGMENT_BSS ].v_base_addr +
291+ inst_offset );
292+
293+ tr_dbg (& lib_manager_tr , "instance_bss_size: %#zx, pointer: %p" , * size ,
294+ (__sparse_force void * )* va_addr );
298295}
299296
300- static int lib_manager_allocate_module_instance (uint32_t module_id , uint32_t instance_id ,
301- uint32_t is_pages , const struct sof_man_module * mod )
297+ static int lib_manager_allocate_module_instance (uint32_t instance_id , uint32_t is_pages ,
298+ const struct sof_man_module * mod )
302299{
303- uint32_t bss_size =
304- (mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count )
305- * PAGE_SZ ;
306- void __sparse_cache * va_base = lib_manager_get_instance_bss_address (module_id ,
307- instance_id , mod );
300+ size_t bss_size ;
301+ void __sparse_cache * va_base ;
302+
303+ lib_manager_get_instance_bss_address (instance_id , mod , & va_base , & bss_size );
308304
309305 if ((is_pages * PAGE_SZ ) > bss_size ) {
310306 tr_err (& lib_manager_tr , "invalid is_pages: %u, required: %u" ,
@@ -324,14 +320,12 @@ static int lib_manager_allocate_module_instance(uint32_t module_id, uint32_t ins
324320 return 0 ;
325321}
326322
327- static int lib_manager_free_module_instance (uint32_t module_id , uint32_t instance_id ,
328- const struct sof_man_module * mod )
323+ static int lib_manager_free_module_instance (uint32_t instance_id , const struct sof_man_module * mod )
329324{
330- uint32_t bss_size =
331- (mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count )
332- * PAGE_SZ ;
333- void __sparse_cache * va_base = lib_manager_get_instance_bss_address (module_id ,
334- instance_id , mod );
325+ size_t bss_size ;
326+ void __sparse_cache * va_base ;
327+
328+ lib_manager_get_instance_bss_address (instance_id , mod , & va_base , & bss_size );
335329 /*
336330 * Unmap bss memory.
337331 */
@@ -343,8 +337,8 @@ uintptr_t lib_manager_allocate_module(const struct comp_ipc_config *ipc_config,
343337{
344338 const struct sof_man_module * mod ;
345339 const struct ipc4_base_module_cfg * base_cfg = ipc_specific_config ;
340+ const uint32_t module_id = IPC4_MOD_ID (ipc_config -> id );
346341 int ret ;
347- uint32_t module_id = IPC4_MOD_ID (ipc_config -> id );
348342
349343 tr_dbg (& lib_manager_tr , "mod_id: %#x" , ipc_config -> id );
350344
@@ -367,8 +361,8 @@ uintptr_t lib_manager_allocate_module(const struct comp_ipc_config *ipc_config,
367361 goto err ;
368362#endif /* CONFIG_LIBCODE_MODULE_SUPPORT */
369363
370- ret = lib_manager_allocate_module_instance (module_id , IPC4_INST_ID (ipc_config -> id ),
371- base_cfg -> is_pages , mod );
364+ ret = lib_manager_allocate_module_instance (IPC4_INST_ID (ipc_config -> id ), base_cfg -> is_pages ,
365+ mod );
372366 if (ret < 0 ) {
373367 tr_err (& lib_manager_tr , "module allocation failed: %d" , ret );
374368#ifdef CONFIG_LIBCODE_MODULE_SUPPORT
@@ -406,7 +400,7 @@ int lib_manager_free_module(const uint32_t component_id)
406400 return ret ;
407401#endif /* CONFIG_LIBCODE_MODULE_SUPPORT */
408402
409- ret = lib_manager_free_module_instance (module_id , IPC4_INST_ID (component_id ), mod );
403+ ret = lib_manager_free_module_instance (IPC4_INST_ID (component_id ), mod );
410404 if (ret < 0 ) {
411405 tr_err (& lib_manager_tr , "free module instance failed: %d" , ret );
412406 return ret ;
0 commit comments