@@ -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,9 @@ 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+ #ifdef CONFIG_SOF_USERSPACE_LL
374+ struct mod_alloc_ctx * alloc = buffer -> audio_buffer .alloc ;
375+ #endif
332376
333377 CORE_CHECK_STRUCT (& buffer -> audio_buffer );
334378
@@ -341,14 +385,16 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
341385 if (size == audio_stream_get_size (& buffer -> stream ))
342386 return 0 ;
343387
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 ) );
388+ #ifdef CONFIG_SOF_USERSPACE_LL
389+ assert ( alloc );
390+ if ( alloc -> vreg )
391+ new_ptr = vregion_alloc_align ( alloc -> vreg , VREGION_MEM_TYPE_INTERIM , size , alignment );
348392 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 );
393+ new_ptr = sof_heap_alloc (alloc -> heap , buffer -> flags , size , alignment );
394+ #else
395+ new_ptr = rballoc_align (buffer -> flags , size , alignment );
396+ #endif
397+
352398 /* we couldn't allocate bigger chunk */
353399 if (!new_ptr && size > audio_stream_get_size (& buffer -> stream )) {
354400 buf_err (buffer , "resize can't alloc %u bytes of flags 0x%x" ,
@@ -357,8 +403,18 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
357403 }
358404
359405 /* use bigger chunk, else just use the old chunk but set smaller */
360- if (new_ptr )
361- buffer -> stream .addr = new_ptr ;
406+ if (new_ptr ) {
407+ #ifdef CONFIG_SOF_USERSPACE_LL
408+ assert (alloc );
409+ if (alloc -> vreg )
410+ vregion_free (alloc -> vreg , audio_stream_get_addr (& buffer -> stream ));
411+ else
412+ sof_heap_free (alloc -> heap , audio_stream_get_addr (& buffer -> stream ));
413+ #else
414+ rfree (audio_stream_get_addr (& buffer -> stream ));
415+ #endif
416+ audio_stream_set_addr (& buffer -> stream , new_ptr );
417+ }
362418
363419 buffer_init_stream (buffer , size );
364420
@@ -368,10 +424,12 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
368424int buffer_set_size_range (struct comp_buffer * buffer , size_t preferred_size , size_t minimum_size ,
369425 uint32_t alignment )
370426{
371- void * ptr = audio_stream_get_addr (& buffer -> stream );
372427 const size_t actual_size = audio_stream_get_size (& buffer -> stream );
373428 void * new_ptr = NULL ;
374429 size_t new_size ;
430+ #ifdef CONFIG_SOF_USERSPACE_LL
431+ struct mod_alloc_ctx * alloc = buffer -> audio_buffer .alloc ;
432+ #endif
375433
376434 CORE_CHECK_STRUCT (& buffer -> audio_buffer );
377435
@@ -389,22 +447,19 @@ int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, siz
389447 if (preferred_size == actual_size )
390448 return 0 ;
391449
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- }
450+ for (new_size = preferred_size ; new_size >= minimum_size ;
451+ new_size -= minimum_size ) {
452+ #ifdef CONFIG_SOF_USERSPACE_LL
453+ assert (alloc );
454+ if (alloc -> vreg )
455+ new_ptr = vregion_alloc_align (alloc -> vreg , VREGION_MEM_TYPE_INTERIM , new_size , alignment );
456+ else
457+ new_ptr = sof_heap_alloc (alloc -> heap , buffer -> flags , new_size , alignment );
458+ #else
459+ new_ptr = rballoc_align (buffer -> flags , new_size , alignment );
460+ #endif
461+ if (new_ptr )
462+ break ;
408463 }
409464
410465 /* we couldn't allocate bigger chunk */
@@ -415,8 +470,18 @@ int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, siz
415470 }
416471
417472 /* use bigger chunk, else just use the old chunk but set smaller */
418- if (new_ptr )
419- buffer -> stream .addr = new_ptr ;
473+ if (new_ptr ) {
474+ #ifdef CONFIG_SOF_USERSPACE_LL
475+ assert (alloc );
476+ if (alloc -> vreg )
477+ vregion_free (alloc -> vreg , audio_stream_get_addr (& buffer -> stream ));
478+ else
479+ sof_heap_free (alloc -> heap , audio_stream_get_addr (& buffer -> stream ));
480+ #else
481+ rfree (audio_stream_get_addr (& buffer -> stream ));
482+ #endif
483+ audio_stream_set_addr (& buffer -> stream , new_ptr );
484+ }
420485
421486 buffer_init_stream (buffer , new_size );
422487
0 commit comments