@@ -233,6 +233,9 @@ static void __sparse_cache *lib_manager_get_instance_bss_address(uint32_t module
233233 uint32_t instance_id ,
234234 struct sof_man_module * mod )
235235{
236+ if (mod -> type .load_type == SOF_MAN_MOD_TYPE_LLEXT )
237+ return (void __sparse_cache * )mod -> segment [SOF_MAN_SEGMENT_BSS ].v_base_addr ;
238+
236239 uint32_t instance_bss_size =
237240 mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count ;
238241 uint32_t inst_offset = instance_bss_size * PAGE_SZ * instance_id ;
@@ -250,11 +253,15 @@ static void __sparse_cache *lib_manager_get_instance_bss_address(uint32_t module
250253static int lib_manager_allocate_module_instance (uint32_t module_id , uint32_t instance_id ,
251254 uint32_t is_pages , struct sof_man_module * mod )
252255{
253- size_t bss_size =
254- (mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count )
255- * PAGE_SZ ;
256256 void __sparse_cache * va_base = lib_manager_get_instance_bss_address (module_id ,
257257 instance_id , mod );
258+ size_t bss_size ;
259+
260+ if (mod -> type .load_type == SOF_MAN_MOD_TYPE_LLEXT )
261+ bss_size = mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length * PAGE_SZ ;
262+ else
263+ bss_size = (mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length /
264+ mod -> instance_max_count ) * PAGE_SZ ;
258265
259266 if ((is_pages * PAGE_SZ ) > bss_size ) {
260267 tr_err (& lib_manager_tr ,
@@ -275,12 +282,16 @@ static int lib_manager_allocate_module_instance(uint32_t module_id, uint32_t ins
275282static int lib_manager_free_module_instance (uint32_t module_id , uint32_t instance_id ,
276283 struct sof_man_module * mod )
277284{
278- size_t bss_size =
279- (mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length / mod -> instance_max_count )
280- * PAGE_SZ ;
285+ size_t bss_size ;
281286 void __sparse_cache * va_base = lib_manager_get_instance_bss_address (module_id ,
282287 instance_id , mod );
283288
289+ if (mod -> type .load_type == SOF_MAN_MOD_TYPE_LLEXT )
290+ bss_size = mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length * PAGE_SZ ;
291+ else
292+ bss_size = (mod -> segment [SOF_MAN_SEGMENT_BSS ].flags .r .length /
293+ mod -> instance_max_count ) * PAGE_SZ ;
294+
284295 /* Unmap bss memory. */
285296 return lib_manager_align_unmap (va_base , bss_size );
286297}
0 commit comments