OSDN Git Service

ASoC: soc-core: call list_del(&rtd->list) at soc_free_pcm_runtime()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 12 Sep 2019 04:38:50 +0000 (13:38 +0900)
committerMark Brown <broonie@kernel.org>
Tue, 1 Oct 2019 11:11:57 +0000 (12:11 +0100)
Current ALSA SoC is calling list_del(&rtd->list) at (1)

static void soc_remove_pcm_runtimes(...)
{
...
for_each_card_rtds_safe(card, rtd, _rtd) {
(1) list_del(&rtd->list);
(2) soc_free_pcm_runtime(rtd);
}
...
}

But, we will call soc_free_pcm_runtime() after that (2).
&rtd->list is         connected at soc_new_pcm_runtime(),
Thus, it should be disconnected at soc_free_pcm_runtime().

This patch calls list_del(&rtd->list) at soc_free_pcm_runtime().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87d0g6f7s5.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index cadf96b..7a3f478 100644 (file)
@@ -359,6 +359,7 @@ static void soc_free_pcm_runtime(struct snd_soc_pcm_runtime *rtd)
 {
        kfree(rtd->codec_dais);
        snd_soc_rtdcom_del_all(rtd);
+       list_del(&rtd->list);
        kfree(rtd);
 }
 
@@ -397,10 +398,8 @@ static void soc_remove_pcm_runtimes(struct snd_soc_card *card)
 {
        struct snd_soc_pcm_runtime *rtd, *_rtd;
 
-       for_each_card_rtds_safe(card, rtd, _rtd) {
-               list_del(&rtd->list);
+       for_each_card_rtds_safe(card, rtd, _rtd)
                soc_free_pcm_runtime(rtd);
-       }
 
        card->num_rtd = 0;
 }