@@ -156,7 +156,16 @@ static void comp_buffer_free(struct sof_audio_buffer *audio_buffer)
156156
157157 struct mod_alloc_ctx * alloc = buffer -> audio_buffer .alloc ;
158158
159+ #ifdef CONFIG_SOF_USERSPACE_LL
160+ assert (alloc );
161+ if (alloc -> vreg )
162+ vregion_free (alloc -> vreg , buffer -> stream .addr );
163+ else
164+ sof_heap_free (alloc -> heap , buffer -> stream .addr );
165+ #else
159166 rfree (buffer -> stream .addr );
167+ #endif
168+
160169 if (alloc && alloc -> vreg ) {
161170 vregion_free (alloc -> vreg , buffer );
162171 if (!vregion_put (alloc -> vreg ))
@@ -254,7 +263,15 @@ struct comp_buffer *buffer_alloc(struct mod_alloc_ctx *alloc, size_t size, uint3
254263 return NULL ;
255264 }
256265
266+ #ifdef CONFIG_SOF_USERSPACE_LL
267+ assert (alloc );
268+ if (alloc -> vreg )
269+ stream_addr = vregion_alloc_align (alloc -> vreg , VREGION_MEM_TYPE_INTERIM , size , align );
270+ else
271+ stream_addr = sof_heap_alloc (alloc -> heap , flags , size , align );
272+ #else
257273 stream_addr = rballoc_align (flags , size , align );
274+ #endif
258275 if (!stream_addr ) {
259276 tr_err (& buffer_tr , "could not alloc size = %zu bytes of flags = 0x%x" ,
260277 size , flags );
@@ -264,7 +281,15 @@ struct comp_buffer *buffer_alloc(struct mod_alloc_ctx *alloc, size_t size, uint3
264281 buffer = buffer_alloc_struct (alloc , stream_addr , size , flags , is_shared );
265282 if (!buffer ) {
266283 tr_err (& buffer_tr , "could not alloc buffer structure" );
284+ #ifdef CONFIG_SOF_USERSPACE_LL
285+ assert (alloc );
286+ if (alloc -> vreg )
287+ vregion_free (alloc -> vreg , stream_addr );
288+ else
289+ sof_heap_free (alloc -> heap , stream_addr );
290+ #else
267291 rfree (stream_addr );
292+ #endif
268293 }
269294
270295 return buffer ;
@@ -292,7 +317,15 @@ struct comp_buffer *buffer_alloc_range(struct mod_alloc_ctx *alloc, size_t prefe
292317 preferred_size += minimum_size - preferred_size % minimum_size ;
293318
294319 for (size = preferred_size ; size >= minimum_size ; size -= minimum_size ) {
320+ #ifdef CONFIG_SOF_USERSPACE_LL
321+ assert (alloc );
322+ if (alloc -> vreg )
323+ stream_addr = vregion_alloc_align (alloc -> vreg , VREGION_MEM_TYPE_INTERIM , size , align );
324+ else
325+ stream_addr = sof_heap_alloc (alloc -> heap , flags , size , align );
326+ #else
295327 stream_addr = rballoc_align (flags , size , align );
328+ #endif
296329 if (stream_addr )
297330 break ;
298331 }
@@ -308,7 +341,15 @@ struct comp_buffer *buffer_alloc_range(struct mod_alloc_ctx *alloc, size_t prefe
308341 buffer = buffer_alloc_struct (alloc , stream_addr , size , flags , is_shared );
309342 if (!buffer ) {
310343 tr_err (& buffer_tr , "could not alloc buffer structure" );
344+ #ifdef CONFIG_SOF_USERSPACE_LL
345+ assert (alloc );
346+ if (alloc -> vreg )
347+ vregion_free (alloc -> vreg , stream_addr );
348+ else
349+ sof_heap_free (alloc -> heap , stream_addr );
350+ #else
311351 rfree (stream_addr );
352+ #endif
312353 }
313354
314355 return buffer ;
@@ -329,6 +370,7 @@ void buffer_zero(struct comp_buffer *buffer)
329370int buffer_set_size (struct comp_buffer * buffer , uint32_t size , uint32_t alignment )
330371{
331372 void * new_ptr = NULL ;
373+ struct mod_alloc_ctx * alloc = buffer -> audio_buffer .alloc ;
332374
333375 CORE_CHECK_STRUCT (& buffer -> audio_buffer );
334376
@@ -341,14 +383,16 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
341383 if (size == audio_stream_get_size (& buffer -> stream ))
342384 return 0 ;
343385
344- if (! alignment )
345- new_ptr = rbrealloc ( audio_stream_get_addr ( & buffer -> stream ),
346- buffer -> flags | SOF_MEM_FLAG_NO_COPY ,
347- size , audio_stream_get_size ( & buffer -> stream ) );
386+ #ifdef CONFIG_SOF_USERSPACE_LL
387+ assert ( alloc );
388+ if ( alloc -> vreg )
389+ new_ptr = vregion_alloc_align ( alloc -> vreg , VREGION_MEM_TYPE_INTERIM , size , alignment );
348390 else
349- new_ptr = rbrealloc_align (audio_stream_get_addr (& buffer -> stream ),
350- buffer -> flags | SOF_MEM_FLAG_NO_COPY , size ,
351- audio_stream_get_size (& buffer -> stream ), alignment );
391+ new_ptr = sof_heap_alloc (alloc -> heap , buffer -> flags , size , alignment );
392+ #else
393+ new_ptr = rballoc_align (buffer -> flags , size , alignment );
394+ #endif
395+
352396 /* we couldn't allocate bigger chunk */
353397 if (!new_ptr && size > audio_stream_get_size (& buffer -> stream )) {
354398 buf_err (buffer , "resize can't alloc %u bytes of flags 0x%x" ,
@@ -357,8 +401,18 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
357401 }
358402
359403 /* use bigger chunk, else just use the old chunk but set smaller */
360- if (new_ptr )
361- buffer -> stream .addr = new_ptr ;
404+ if (new_ptr ) {
405+ #ifdef CONFIG_SOF_USERSPACE_LL
406+ assert (alloc );
407+ if (alloc -> vreg )
408+ vregion_free (alloc -> vreg , audio_stream_get_addr (& buffer -> stream ));
409+ else
410+ sof_heap_free (alloc -> heap , audio_stream_get_addr (& buffer -> stream ));
411+ #else
412+ rfree (audio_stream_get_addr (& buffer -> stream ));
413+ #endif
414+ audio_stream_set_addr (& buffer -> stream , new_ptr );
415+ }
362416
363417 buffer_init_stream (buffer , size );
364418
@@ -368,10 +422,10 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
368422int buffer_set_size_range (struct comp_buffer * buffer , size_t preferred_size , size_t minimum_size ,
369423 uint32_t alignment )
370424{
371- void * ptr = audio_stream_get_addr (& buffer -> stream );
372425 const size_t actual_size = audio_stream_get_size (& buffer -> stream );
373426 void * new_ptr = NULL ;
374427 size_t new_size ;
428+ struct mod_alloc_ctx * alloc = buffer -> audio_buffer .alloc ;
375429
376430 CORE_CHECK_STRUCT (& buffer -> audio_buffer );
377431
@@ -389,22 +443,19 @@ int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, siz
389443 if (preferred_size == actual_size )
390444 return 0 ;
391445
392- if (!alignment ) {
393- for (new_size = preferred_size ; new_size >= minimum_size ;
394- new_size -= minimum_size ) {
395- new_ptr = rbrealloc (ptr , buffer -> flags | SOF_MEM_FLAG_NO_COPY ,
396- new_size , actual_size );
397- if (new_ptr )
398- break ;
399- }
400- } else {
401- for (new_size = preferred_size ; new_size >= minimum_size ;
402- new_size -= minimum_size ) {
403- new_ptr = rbrealloc_align (ptr , buffer -> flags | SOF_MEM_FLAG_NO_COPY ,
404- new_size , actual_size , alignment );
405- if (new_ptr )
406- break ;
407- }
446+ for (new_size = preferred_size ; new_size >= minimum_size ;
447+ new_size -= minimum_size ) {
448+ #ifdef CONFIG_SOF_USERSPACE_LL
449+ assert (alloc );
450+ if (alloc -> vreg )
451+ new_ptr = vregion_alloc_align (alloc -> vreg , VREGION_MEM_TYPE_INTERIM , new_size , alignment );
452+ else
453+ new_ptr = sof_heap_alloc (alloc -> heap , buffer -> flags , new_size , alignment );
454+ #else
455+ new_ptr = rballoc_align (buffer -> flags , new_size , alignment );
456+ #endif
457+ if (new_ptr )
458+ break ;
408459 }
409460
410461 /* we couldn't allocate bigger chunk */
@@ -415,8 +466,18 @@ int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, siz
415466 }
416467
417468 /* use bigger chunk, else just use the old chunk but set smaller */
418- if (new_ptr )
419- buffer -> stream .addr = new_ptr ;
469+ if (new_ptr ) {
470+ #ifdef CONFIG_SOF_USERSPACE_LL
471+ assert (alloc );
472+ if (alloc -> vreg )
473+ vregion_free (alloc -> vreg , audio_stream_get_addr (& buffer -> stream ));
474+ else
475+ sof_heap_free (alloc -> heap , audio_stream_get_addr (& buffer -> stream ));
476+ #else
477+ rfree (audio_stream_get_addr (& buffer -> stream ));
478+ #endif
479+ audio_stream_set_addr (& buffer -> stream , new_ptr );
480+ }
420481
421482 buffer_init_stream (buffer , new_size );
422483
0 commit comments