Skip to content

Commit 36463e2

Browse files
author
Jyri Sarha
committed
Audio: DRC: Memory, blob, and fast_get allocs to module API
Allocate all memory, blob handlers, and fast_get() buffers through module API mod_alloc() and friends and remove all redundant rfree(), comp_data_blob_handler_free(), and fast_put() calls from module unload functions and init error branches. Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
1 parent 71c0ca3 commit 36463e2

File tree

3 files changed

+23
-30
lines changed

3 files changed

+23
-30
lines changed

src/audio/drc/drc.c

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include <ipc/stream.h>
2121
#include <ipc/topology.h>
2222
#include <module/module/llext.h>
23-
#include <rtos/alloc.h>
2423
#include <rtos/init.h>
2524
#include <rtos/panic.h>
2625
#include <rtos/string.h>
@@ -43,11 +42,11 @@ extern const struct sof_uuid drc_uuid;
4342
extern struct tr_ctx drc_tr;
4443

4544
/* Called from drc_setup() from drc_process(), so cannot be __cold */
46-
void drc_reset_state(struct drc_state *state)
45+
void drc_reset_state(struct processing_module *mod, struct drc_state *state)
4746
{
4847
int i;
4948

50-
rfree(state->pre_delay_buffers[0]);
49+
mod_free(mod, state->pre_delay_buffers[0]);
5150
for (i = 0; i < PLATFORM_MAX_CHANNELS; ++i) {
5251
state->pre_delay_buffers[i] = NULL;
5352
}
@@ -67,7 +66,8 @@ void drc_reset_state(struct drc_state *state)
6766
state->max_attack_compression_diff_db = INT32_MIN;
6867
}
6968

70-
int drc_init_pre_delay_buffers(struct drc_state *state,
69+
int drc_init_pre_delay_buffers(struct processing_module *mod,
70+
struct drc_state *state,
7171
size_t sample_bytes,
7272
int channels)
7373
{
@@ -76,7 +76,7 @@ int drc_init_pre_delay_buffers(struct drc_state *state,
7676
int i;
7777

7878
/* Allocate pre-delay (lookahead) buffers */
79-
state->pre_delay_buffers[0] = rballoc(SOF_MEM_FLAG_USER, bytes_total);
79+
state->pre_delay_buffers[0] = mod_alloc(mod, bytes_total);
8080
if (!state->pre_delay_buffers[0])
8181
return -ENOMEM;
8282

@@ -121,16 +121,17 @@ int drc_set_pre_delay_time(struct drc_state *state,
121121
}
122122

123123
/* Called from drc_process(), so cannot be __cold */
124-
static int drc_setup(struct drc_comp_data *cd, uint16_t channels, uint32_t rate)
124+
static int drc_setup(struct processing_module *mod, uint16_t channels, uint32_t rate)
125125
{
126+
struct drc_comp_data *cd = module_get_private_data(mod);
126127
uint32_t sample_bytes = get_sample_bytes(cd->source_format);
127128
int ret;
128129

129130
/* Reset any previous state */
130-
drc_reset_state(&cd->state);
131+
drc_reset_state(mod, &cd->state);
131132

132133
/* Allocate pre-delay buffers */
133-
ret = drc_init_pre_delay_buffers(&cd->state, (size_t)sample_bytes, (int)channels);
134+
ret = drc_init_pre_delay_buffers(mod, &cd->state, (size_t)sample_bytes, (int)channels);
134135
if (ret < 0)
135136
return ret;
136137

@@ -164,28 +165,27 @@ __cold static int drc_init(struct processing_module *mod)
164165
return -EINVAL;
165166
}
166167

167-
cd = rzalloc(SOF_MEM_FLAG_USER, sizeof(*cd));
168+
cd = mod_zalloc(mod, sizeof(*cd));
168169
if (!cd)
169170
return -ENOMEM;
170171

171172
md->private = cd;
172173

173174
/* Handler for configuration data */
174-
cd->model_handler = comp_data_blob_handler_new(dev);
175+
cd->model_handler = mod_data_blob_handler_new(mod);
175176
if (!cd->model_handler) {
176177
comp_err(dev, "comp_data_blob_handler_new() failed.");
177-
ret = -ENOMEM;
178-
goto cd_fail;
178+
return -ENOMEM;
179179
}
180180

181181
/* Get configuration data and reset DRC state */
182182
ret = comp_init_data_blob(cd->model_handler, bs, cfg->data);
183183
if (ret < 0) {
184184
comp_err(dev, "comp_init_data_blob() failed.");
185-
goto cd_fail;
185+
return ret;
186186
}
187187

188-
drc_reset_state(&cd->state);
188+
drc_reset_state(mod, &cd->state);
189189

190190
/* Initialize DRC to enabled. If defined by topology, a control may set
191191
* enabled to false before prepare() or during streaming with the switch
@@ -194,21 +194,12 @@ __cold static int drc_init(struct processing_module *mod)
194194
cd->enabled = true;
195195
cd->enable_switch = true;
196196
return 0;
197-
198-
cd_fail:
199-
comp_data_blob_handler_free(cd->model_handler);
200-
rfree(cd);
201-
return ret;
202197
}
203198

204199
__cold static int drc_free(struct processing_module *mod)
205200
{
206-
struct drc_comp_data *cd = module_get_private_data(mod);
207-
208201
assert_can_be_cold();
209202

210-
comp_data_blob_handler_free(cd->model_handler);
211-
rfree(cd);
212203
return 0;
213204
}
214205

@@ -284,7 +275,7 @@ static int drc_process(struct processing_module *mod,
284275
/* Check for changed configuration */
285276
if (comp_is_new_data_blob_available(cd->model_handler)) {
286277
cd->config = comp_get_data_blob(cd->model_handler, NULL, NULL);
287-
ret = drc_setup(cd, audio_stream_get_channels(source),
278+
ret = drc_setup(mod, audio_stream_get_channels(source),
288279
audio_stream_get_rate(source));
289280
if (ret < 0) {
290281
comp_err(dev, "drc_copy(), failed DRC setup");
@@ -370,7 +361,7 @@ static int drc_prepare(struct processing_module *mod,
370361
comp_info(dev, "drc_prepare(), source_format=%d", cd->source_format);
371362
cd->config = comp_get_data_blob(cd->model_handler, NULL, NULL);
372363
if (cd->config) {
373-
ret = drc_setup(cd, channels, rate);
364+
ret = drc_setup(mod, channels, rate);
374365
if (ret < 0) {
375366
comp_err(dev, "drc_prepare() error: drc_setup failed.");
376367
return ret;
@@ -403,7 +394,7 @@ static int drc_reset(struct processing_module *mod)
403394
{
404395
struct drc_comp_data *cd = module_get_private_data(mod);
405396

406-
drc_reset_state(&cd->state);
397+
drc_reset_state(mod, &cd->state);
407398

408399
return 0;
409400
}

src/audio/drc/drc_algorithm.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414
#include "drc.h"
1515

1616
/* drc reset function */
17-
void drc_reset_state(struct drc_state *state);
17+
void drc_reset_state(struct processing_module *mod, struct drc_state *state);
1818

1919
/* drc init functions */
20-
int drc_init_pre_delay_buffers(struct drc_state *state,
20+
int drc_init_pre_delay_buffers(struct processing_module *mod,
21+
struct drc_state *state,
2122
size_t sample_bytes,
2223
int channels);
2324
int drc_set_pre_delay_time(struct drc_state *state,

src/audio/multiband_drc/multiband_drc.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ static void multiband_drc_reset_state(struct processing_module *mod,
5757

5858
/* Reset drc kernel state */
5959
for (i = 0; i < SOF_MULTIBAND_DRC_MAX_BANDS; i++)
60-
drc_reset_state(&state->drc[i]);
60+
drc_reset_state(mod, &state->drc[i]);
6161

6262
/* Reset deemphasis eq-iir state */
6363
for (i = 0; i < PLATFORM_MAX_CHANNELS; i++)
@@ -184,7 +184,8 @@ static int multiband_drc_init_coef(struct processing_module *mod, int16_t nch, u
184184
for (i = 0; i < num_bands; i++) {
185185
comp_info(dev, "multiband_drc_init_coef(), initializing drc band %d", i);
186186

187-
ret = drc_init_pre_delay_buffers(&state->drc[i], (size_t)sample_bytes, (int)nch);
187+
ret = drc_init_pre_delay_buffers(mod, &state->drc[i],
188+
(size_t)sample_bytes, (int)nch);
188189
if (ret < 0) {
189190
comp_err(dev,
190191
"multiband_drc_init_coef(), could not init pre delay buffers");

0 commit comments

Comments
 (0)