Skip to content

Commit

Permalink
Revert "loading module: fix native module interface register"
Browse files Browse the repository at this point in the history
This reverts commit a082752. The
commit prevents modules_free() from being called, which leads to
leaking memory and a failure to call lib_manager_free_module().
For LLEXT modules this also leads to failures when using a module
for the second and following times.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
  • Loading branch information
lyakh committed Mar 8, 2024
1 parent 1829417 commit bc79c69
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions src/audio/module_adapter/module/modules.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ static int modules_new(struct processing_module *mod, const void *buildinfo,
(module_entry->segment[SOF_MAN_SEGMENT_TEXT].v_base_addr);
}

void *mod_adp;

byte_array_t mod_cfg = {
.data = (uint8_t *)md->cfg.init_data,
/* Intel modules expects DW size here */
Expand All @@ -91,21 +93,21 @@ static int modules_new(struct processing_module *mod, const void *buildinfo,
/* Check if module is FDK */
if (mod_buildinfo->format == IADK_MODULE_API_BUILD_INFO_FORMAT &&
mod_buildinfo->api_version_number.full == IADK_MODULE_API_CURRENT_VERSION) {
md->module_adapter = (void *)system_agent_start(module_entry_point,
module_id, instance_id,
0, log_handle, &mod_cfg);
mod_adp = system_agent_start(module_entry_point, module_id,
instance_id, 0, log_handle, &mod_cfg);
} else if (mod_buildinfo->format == SOF_MODULE_API_BUILD_INFO_FORMAT &&
mod_buildinfo->api_version_number.full == SOF_MODULE_API_CURRENT_VERSION) {
/* The module is native: start agent for sof loadable */
mod->is_native_sof = true;
md->ops = native_system_agent_start(mod->sys_service, module_entry_point,
module_id, instance_id,
0, log_handle, &mod_cfg);
mod_adp = native_system_agent_start(mod->sys_service, module_entry_point,
module_id, instance_id, 0, log_handle,
&mod_cfg);
} else {
return -ENOEXEC;
}

md->module_entry_point = module_entry_point;
md->module_adapter = mod_adp;
md->private = mod;

return 0;
Expand Down Expand Up @@ -161,7 +163,8 @@ static int modules_init(struct processing_module *mod)

/* Call module specific init function if exists. */
if (mod->is_native_sof) {
const struct module_interface *mod_in = md->ops;
struct module_interface *mod_in =
(struct module_interface *)md->module_adapter;

/* The order of preference */
if (mod_in->process)
Expand Down Expand Up @@ -204,7 +207,8 @@ static int modules_prepare(struct processing_module *mod,

/* Call module specific prepare function if exists. */
if (mod->is_native_sof) {
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

ret = mod_in->prepare(mod, sources, num_of_sources, sinks, num_of_sinks);
} else {
Expand Down Expand Up @@ -235,7 +239,7 @@ static int modules_process(struct processing_module *mod,
return iadk_wrapper_process(mod->priv.module_adapter, sources,
num_of_sources, sinks, num_of_sinks);

const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in = (struct module_interface *)mod->priv.module_adapter;

return mod_in->process(mod, sources, num_of_sources, sinks, num_of_sinks);
}
Expand All @@ -249,7 +253,7 @@ static int modules_process_audio_stream(struct processing_module *mod,
if (!mod->is_native_sof)
return -EOPNOTSUPP;

const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in = (struct module_interface *)mod->priv.module_adapter;

return mod_in->process_audio_stream(mod, input_buffers, num_input_buffers,
output_buffers, num_output_buffers);
Expand Down Expand Up @@ -277,7 +281,8 @@ static int modules_process_raw(struct processing_module *mod,
modules_init_process(mod);

/* Call module specific process function. */
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

return mod_in->process_raw_data(mod, input_buffers, num_input_buffers,
output_buffers, num_output_buffers);
Expand All @@ -299,7 +304,8 @@ static int modules_free(struct processing_module *mod)

comp_info(dev, "modules_free()");
if (mod->is_native_sof) {
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

ret = mod_in->free(mod);
} else {
Expand Down Expand Up @@ -344,7 +350,8 @@ static int modules_set_configuration(struct processing_module *mod, uint32_t con
size_t response_size)
{
if (mod->is_native_sof) {
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

return mod_in->set_configuration(mod, config_id, pos, data_offset_size, fragment,
fragment_size, response, response_size);
Expand All @@ -371,7 +378,8 @@ static int modules_get_configuration(struct processing_module *mod, uint32_t con
size_t fragment_size)
{
if (mod->is_native_sof) {
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

return mod_in->get_configuration(mod, config_id, data_offset_size,
fragment, fragment_size);
Expand All @@ -392,7 +400,8 @@ static int modules_set_processing_mode(struct processing_module *mod,
enum module_processing_mode mode)
{
if (mod->is_native_sof) {
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

return mod_in->set_processing_mode(mod, mode);
}
Expand Down Expand Up @@ -420,7 +429,8 @@ static enum module_processing_mode modules_get_processing_mode(struct processing
static int modules_reset(struct processing_module *mod)
{
if (mod->is_native_sof) {
const struct module_interface *mod_in = mod->priv.ops;
struct module_interface *mod_in =
(struct module_interface *)mod->priv.module_adapter;

return mod_in->reset(mod);
}
Expand Down

0 comments on commit bc79c69

Please sign in to comment.