mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 13:41:48 -04:00
ASoC: SOF: topology: use kzalloc_flex
Simplify allocation by using a flexible array member. Add __counted_by for extra runtime analysis. Signed-off-by: Rosen Penev <rosenp@gmail.com> Link: https://patch.msgid.link/20260326023053.53493-1-rosenp@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -411,11 +411,11 @@ struct snd_sof_dai_link {
|
||||
struct snd_sof_tuple *tuples;
|
||||
int num_tuples;
|
||||
struct snd_soc_dai_link *link;
|
||||
struct snd_soc_tplg_hw_config *hw_configs;
|
||||
int num_hw_configs;
|
||||
int default_hw_cfg_id;
|
||||
int type;
|
||||
struct list_head list;
|
||||
struct snd_soc_tplg_hw_config hw_configs[] __counted_by(num_hw_configs);
|
||||
};
|
||||
|
||||
/* ASoC SOF DAPM widget */
|
||||
|
||||
@@ -1908,18 +1908,12 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
slink = kzalloc_obj(*slink);
|
||||
slink = kzalloc_flex(*slink, hw_configs, le32_to_cpu(cfg->num_hw_configs));
|
||||
if (!slink)
|
||||
return -ENOMEM;
|
||||
|
||||
slink->num_hw_configs = le32_to_cpu(cfg->num_hw_configs);
|
||||
slink->hw_configs = kmemdup_array(cfg->hw_config,
|
||||
slink->num_hw_configs, sizeof(*slink->hw_configs),
|
||||
GFP_KERNEL);
|
||||
if (!slink->hw_configs) {
|
||||
kfree(slink);
|
||||
return -ENOMEM;
|
||||
}
|
||||
memcpy(slink->hw_configs, cfg->hw_config, le32_to_cpu(cfg->num_hw_configs) * sizeof(*slink->hw_configs));
|
||||
|
||||
slink->default_hw_cfg_id = le32_to_cpu(cfg->default_hw_config_id);
|
||||
slink->link = link;
|
||||
@@ -1932,7 +1926,6 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
|
||||
private->array, le32_to_cpu(private->size));
|
||||
if (ret < 0) {
|
||||
dev_err(scomp->dev, "Failed tp parse common DAI link tokens\n");
|
||||
kfree(slink->hw_configs);
|
||||
kfree(slink);
|
||||
return ret;
|
||||
}
|
||||
@@ -2003,7 +1996,6 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
|
||||
/* allocate memory for tuples array */
|
||||
slink->tuples = kzalloc_objs(*slink->tuples, num_tuples);
|
||||
if (!slink->tuples) {
|
||||
kfree(slink->hw_configs);
|
||||
kfree(slink);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -2061,7 +2053,6 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
|
||||
|
||||
err:
|
||||
kfree(slink->tuples);
|
||||
kfree(slink->hw_configs);
|
||||
kfree(slink);
|
||||
|
||||
return ret;
|
||||
@@ -2078,7 +2069,6 @@ static int sof_link_unload(struct snd_soc_component *scomp, struct snd_soc_dobj
|
||||
|
||||
kfree(slink->tuples);
|
||||
list_del(&slink->list);
|
||||
kfree(slink->hw_configs);
|
||||
kfree(slink);
|
||||
dobj->private = NULL;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user