Hi Stephan > apq8016_sbc_parse_of() sets up multiple DAI links, depending on the > number of nodes in the device tree. However, at the moment > CPU and platform components are only allocated for the first link. > This causes an oops when more than one link is defined: > > Internal error: Oops: 96000044 [#1] SMP > CPU: 0 PID: 1015 Comm: kworker/0:2 Not tainted 5.3.0-rc1 #4 > Call trace: > apq8016_sbc_platform_probe+0x1a8/0x3f0 > platform_drv_probe+0x50/0xa0 > ... > > Move the allocation inside the loop to ensure that each link is > properly initialized. > > Fixes: 98b232ca9e0e ("ASoC: qcom: apq8016_sbc: use modern dai_link style") > Signed-off-by: Stephan Gerhold <stephan@xxxxxxxxxxx> > --- Ahh, sorry about that Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > sound/soc/qcom/apq8016_sbc.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/sound/soc/qcom/apq8016_sbc.c b/sound/soc/qcom/apq8016_sbc.c > index f60a71990f66..ac75838bbfab 100644 > --- a/sound/soc/qcom/apq8016_sbc.c > +++ b/sound/soc/qcom/apq8016_sbc.c > @@ -150,17 +150,17 @@ static struct apq8016_sbc_data *apq8016_sbc_parse_of(struct snd_soc_card *card) > > link = data->dai_link; > > - dlc = devm_kzalloc(dev, 2 * sizeof(*dlc), GFP_KERNEL); > - if (!dlc) > - return ERR_PTR(-ENOMEM); > + for_each_child_of_node(node, np) { > + dlc = devm_kzalloc(dev, 2 * sizeof(*dlc), GFP_KERNEL); > + if (!dlc) > + return ERR_PTR(-ENOMEM); > > - link->cpus = &dlc[0]; > - link->platforms = &dlc[1]; > + link->cpus = &dlc[0]; > + link->platforms = &dlc[1]; > > - link->num_cpus = 1; > - link->num_platforms = 1; > + link->num_cpus = 1; > + link->num_platforms = 1; > > - for_each_child_of_node(node, np) { > cpu = of_get_child_by_name(np, "cpu"); > codec = of_get_child_by_name(np, "codec"); > > -- > 2.22.0 > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel