Message ID | 20200122190752.3081016-1-perex@perex.cz (mailing list archive) |
---|---|
State | Accepted |
Commit | 8ce1cbd6ce0b1bda0c980c64fee4c1e1378355f1 |
Headers | show |
Series | ASoC: topology: fix soc_tplg_fe_link_create() - link->dobj initialization order | expand |
On 1/22/20 1:07 PM, Jaroslav Kysela wrote: > The code which checks the return value for snd_soc_add_dai_link() call > in soc_tplg_fe_link_create() moved the snd_soc_add_dai_link() call before > link->dobj members initialization. > > While it does not affect the latest kernels, the old soc-core.c code > in the stable kernels is affected. The snd_soc_add_dai_link() function uses > the link->dobj.type member to check, if the link structure is valid. > > Reorder the link->dobj initialization to make things work again. > It's harmless for the recent code (and the structure should be properly > initialized before other calls anyway). > > The problem is in stable linux-5.4.y since version 5.4.11 when the > upstream commit 76d270364932 was applied. I am not following. Is this a fix for linux-5.4-y only, or is it needed on Mark's tree? In the latter case, what is broken? We've been using Mark's tree without issues, wondering what we missed? > > Fixes: 76d270364932 ("ASoC: topology: Check return value for snd_soc_add_dai_link()") > Cc: Dragos Tarcatu <dragos_tarcatu@mentor.com> > Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > Cc: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: <stable@vger.kernel.org> > Signed-off-by: Jaroslav Kysela <perex@perex.cz> > --- > sound/soc/soc-topology.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c > index 92e4f4d08bfa..4e1fe623c390 100644 > --- a/sound/soc/soc-topology.c > +++ b/sound/soc/soc-topology.c > @@ -1906,6 +1906,10 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, > link->num_codecs = 1; > link->num_platforms = 1; > > + link->dobj.index = tplg->index; > + link->dobj.ops = tplg->ops; > + link->dobj.type = SND_SOC_DOBJ_DAI_LINK; > + > if (strlen(pcm->pcm_name)) { > link->name = kstrdup(pcm->pcm_name, GFP_KERNEL); > link->stream_name = kstrdup(pcm->pcm_name, GFP_KERNEL); > @@ -1942,9 +1946,6 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, > goto err; > } > > - link->dobj.index = tplg->index; > - link->dobj.ops = tplg->ops; > - link->dobj.type = SND_SOC_DOBJ_DAI_LINK; > list_add(&link->dobj.list, &tplg->comp->dobj_list); > > return 0; >
On Wed, Jan 22, 2020 at 01:28:57PM -0600, Pierre-Louis Bossart wrote: > On 1/22/20 1:07 PM, Jaroslav Kysela wrote: > > The code which checks the return value for snd_soc_add_dai_link() call > > in soc_tplg_fe_link_create() moved the snd_soc_add_dai_link() call before > > link->dobj members initialization. > > While it does not affect the latest kernels, the old soc-core.c code > > in the stable kernels is affected. The snd_soc_add_dai_link() function uses > > the link->dobj.type member to check, if the link structure is valid. > > Reorder the link->dobj initialization to make things work again. > > It's harmless for the recent code (and the structure should be properly > > initialized before other calls anyway). > > The problem is in stable linux-5.4.y since version 5.4.11 when the > > upstream commit 76d270364932 was applied. > I am not following. Is this a fix for linux-5.4-y only, or is it needed on > Mark's tree? In the latter case, what is broken? We've been using Mark's > tree without issues, wondering what we missed? He's saying it's a fix for stable but it's just a cleanup and robustness improvement in current kernels - when the patch 76d270364932 (ASoC: topology: Check return value for snd_soc_add_dai_link()) was backported by the bot the bot missed some other context which triggered bugs. Copying in Sasha and Greg for stable (not sure if the list works by itself).
Dne 22. 01. 20 v 21:25 Mark Brown napsal(a): > On Wed, Jan 22, 2020 at 01:28:57PM -0600, Pierre-Louis Bossart wrote: >> On 1/22/20 1:07 PM, Jaroslav Kysela wrote: > >>> The code which checks the return value for snd_soc_add_dai_link() call >>> in soc_tplg_fe_link_create() moved the snd_soc_add_dai_link() call before >>> link->dobj members initialization. > >>> While it does not affect the latest kernels, the old soc-core.c code >>> in the stable kernels is affected. The snd_soc_add_dai_link() function uses >>> the link->dobj.type member to check, if the link structure is valid. > >>> Reorder the link->dobj initialization to make things work again. >>> It's harmless for the recent code (and the structure should be properly >>> initialized before other calls anyway). > >>> The problem is in stable linux-5.4.y since version 5.4.11 when the >>> upstream commit 76d270364932 was applied. > >> I am not following. Is this a fix for linux-5.4-y only, or is it needed on >> Mark's tree? In the latter case, what is broken? We've been using Mark's >> tree without issues, wondering what we missed? > > He's saying it's a fix for stable but it's just a cleanup and robustness > improvement in current kernels - when the patch 76d270364932 (ASoC: > topology: Check return value for snd_soc_add_dai_link()) was backported > by the bot the bot missed some other context which triggered bugs. Exactly. It's because the commit 237d19080cd37e1ccf5462e63d8577d713f6da46 ("ASoC: soc-core: remove topology specific operation") removed the link->dobj checks, but this commit was not picked to the stable kernels. The initialization reordering is fine for all kernels (and makes sense), so I would like to apply it everywhere. Thanks, Jaroslav
>>> I am not following. Is this a fix for linux-5.4-y only, or is it >>> needed on >>> Mark's tree? In the latter case, what is broken? We've been using Mark's >>> tree without issues, wondering what we missed? >> >> He's saying it's a fix for stable but it's just a cleanup and robustness >> improvement in current kernels - when the patch 76d270364932 (ASoC: >> topology: Check return value for snd_soc_add_dai_link()) was backported >> by the bot the bot missed some other context which triggered bugs. > > Exactly. It's because the commit > 237d19080cd37e1ccf5462e63d8577d713f6da46 ("ASoC: soc-core: remove > topology specific operation") removed the link->dobj checks, but this > commit was not picked to the stable kernels. > > The initialization reordering is fine for all kernels (and makes sense), > so I would like to apply it everywhere. ok, thanks for the precisions.
On Wed, Jan 22, 2020 at 08:25:30PM +0000, Mark Brown wrote: > On Wed, Jan 22, 2020 at 01:28:57PM -0600, Pierre-Louis Bossart wrote: > > On 1/22/20 1:07 PM, Jaroslav Kysela wrote: > > > > The code which checks the return value for snd_soc_add_dai_link() call > > > in soc_tplg_fe_link_create() moved the snd_soc_add_dai_link() call before > > > link->dobj members initialization. > > > > While it does not affect the latest kernels, the old soc-core.c code > > > in the stable kernels is affected. The snd_soc_add_dai_link() function uses > > > the link->dobj.type member to check, if the link structure is valid. > > > > Reorder the link->dobj initialization to make things work again. > > > It's harmless for the recent code (and the structure should be properly > > > initialized before other calls anyway). > > > > The problem is in stable linux-5.4.y since version 5.4.11 when the > > > upstream commit 76d270364932 was applied. > > > I am not following. Is this a fix for linux-5.4-y only, or is it needed on > > Mark's tree? In the latter case, what is broken? We've been using Mark's > > tree without issues, wondering what we missed? > > He's saying it's a fix for stable but it's just a cleanup and robustness > improvement in current kernels - when the patch 76d270364932 (ASoC: > topology: Check return value for snd_soc_add_dai_link()) was backported > by the bot the bot missed some other context which triggered bugs. > > Copying in Sasha and Greg for stable (not sure if the list works by > itself). How this was marked-up is fine, our scripts can easily handle it, thanks. greg k-h
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index 92e4f4d08bfa..4e1fe623c390 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1906,6 +1906,10 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, link->num_codecs = 1; link->num_platforms = 1; + link->dobj.index = tplg->index; + link->dobj.ops = tplg->ops; + link->dobj.type = SND_SOC_DOBJ_DAI_LINK; + if (strlen(pcm->pcm_name)) { link->name = kstrdup(pcm->pcm_name, GFP_KERNEL); link->stream_name = kstrdup(pcm->pcm_name, GFP_KERNEL); @@ -1942,9 +1946,6 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, goto err; } - link->dobj.index = tplg->index; - link->dobj.ops = tplg->ops; - link->dobj.type = SND_SOC_DOBJ_DAI_LINK; list_add(&link->dobj.list, &tplg->comp->dobj_list); return 0;
The code which checks the return value for snd_soc_add_dai_link() call in soc_tplg_fe_link_create() moved the snd_soc_add_dai_link() call before link->dobj members initialization. While it does not affect the latest kernels, the old soc-core.c code in the stable kernels is affected. The snd_soc_add_dai_link() function uses the link->dobj.type member to check, if the link structure is valid. Reorder the link->dobj initialization to make things work again. It's harmless for the recent code (and the structure should be properly initialized before other calls anyway). The problem is in stable linux-5.4.y since version 5.4.11 when the upstream commit 76d270364932 was applied. Fixes: 76d270364932 ("ASoC: topology: Check return value for snd_soc_add_dai_link()") Cc: Dragos Tarcatu <dragos_tarcatu@mentor.com> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Cc: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Cc: Mark Brown <broonie@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Jaroslav Kysela <perex@perex.cz> --- sound/soc/soc-topology.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)