Skip to content

Commit 1b5a5a3

Browse files
lyakhlgirdwood
authored andcommitted
ring-buffer: allocate on module heap
Allocate the ring-buffer object on module heap too for DP access. Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
1 parent 53f5236 commit 1b5a5a3

2 files changed

Lines changed: 10 additions & 3 deletions

File tree

src/audio/buffers/ring_buffer.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <sof/trace/trace.h>
88
#include <sof/lib/uuid.h>
99

10+
#include <sof/audio/module_adapter/module/generic.h>
1011
#include <sof/audio/ring_buffer.h>
1112
#include <sof/audio/component.h>
1213

@@ -97,7 +98,7 @@ static void ring_buffer_free(struct sof_audio_buffer *audio_buffer)
9798
container_of(audio_buffer, struct ring_buffer, audio_buffer);
9899

99100
rfree((__sparse_force void *)ring_buffer->_data_buffer);
100-
rfree(ring_buffer);
101+
sof_heap_free(audio_buffer->heap, ring_buffer);
101102
}
102103

103104
static void ring_buffer_reset(struct sof_audio_buffer *audio_buffer)
@@ -286,14 +287,17 @@ struct ring_buffer *ring_buffer_create(struct comp_dev *dev, size_t min_availabl
286287
uint32_t id)
287288
{
288289
struct ring_buffer *ring_buffer;
290+
struct k_heap *heap = dev->mod->priv.resources.heap;
289291
int memory_flags = (is_shared ? SOF_MEM_FLAG_COHERENT : 0) |
290292
user_get_buffer_memory_region(dev->drv);
291293

292294
/* allocate ring_buffer structure */
293-
ring_buffer = rzalloc(memory_flags, sizeof(*ring_buffer));
295+
ring_buffer = sof_heap_alloc(heap, memory_flags, sizeof(*ring_buffer), 0);
294296
if (!ring_buffer)
295297
return NULL;
296298

299+
memset(ring_buffer, 0, sizeof(*ring_buffer));
300+
297301
/* init base structure. The audio_stream_params is NULL because ring_buffer
298302
* is currently used as a secondary buffer for DP only
299303
*
@@ -303,6 +307,7 @@ struct ring_buffer *ring_buffer_create(struct comp_dev *dev, size_t min_availabl
303307
audio_buffer_init(&ring_buffer->audio_buffer, BUFFER_TYPE_RING_BUFFER,
304308
is_shared, &ring_buffer_source_ops, &ring_buffer_sink_ops,
305309
&audio_buffer_ops, NULL);
310+
ring_buffer->audio_buffer.heap = heap;
306311

307312
/* set obs/ibs in sink/source interfaces */
308313
sink_set_min_free_space(audio_buffer_get_sink(&ring_buffer->audio_buffer),
@@ -374,6 +379,6 @@ struct ring_buffer *ring_buffer_create(struct comp_dev *dev, size_t min_availabl
374379
return ring_buffer;
375380
err:
376381
tr_err(&ring_buffer_tr, "Ring buffer creation failure");
377-
rfree(ring_buffer);
382+
sof_heap_free(heap, ring_buffer);
378383
return NULL;
379384
}

src/include/sof/audio/audio_buffer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ struct sof_audio_buffer {
110110
* should not be in struct sof_audio_buffer at all, kept for pipeline2.0 transition
111111
*/
112112
bool walking; /**< indicates if the buffer is being walked */
113+
114+
struct k_heap *heap;
113115
};
114116

115117
#if CONFIG_PIPELINE_2_0

0 commit comments

Comments
 (0)