[alsa-devel] [PATCH 06/13] ASoC: soc-core: merge soc_free_pcm_runtime() and soc_rtd_free()
Sridharan, Ranjani
ranjani.sridharan at intel.com
Tue Sep 10 17:33:45 CEST 2019
On Mon, Sep 9, 2019 at 7:10 PM Kuninori Morimoto <
kuninori.morimoto.gx at renesas.com> wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
>
> "rtd" is handled by soc_xxx_pcm_runtime(), and
> "rtd->dev" is handled by soc_rtd_xxx().
>
> There is no reason to separate these, and it makes code complex.
> We can free these in the same time.
>
> Here soc_rtd_free() (A) which frees rtd->dev is called from
> soc_remove_link_dais() many times (1).
> Then, it is using dev_registered flags to avoid multi kfree() (2).
> This is no longer needed if we can merge these functions.
>
> static void soc_remove_link_dais(...)
> {
> ...
> (1) for_each_comp_order(order) {
> (1) for_each_card_rtds(card, rtd) {
>
> (A) soc_rtd_free(rtd);
> ...
> }
> }
> }
>
> (A) static void soc_rtd_free(...)
> {
> (2) if (rtd->dev_registered) {
> /* we don't need to call kfree() for rtd->dev */
> device_unregister(rtd->dev);
> (2) rtd->dev_registered = 0;
> }
> }
>
> This patch merges soc_rtd_free() into soc_free_pcm_runtime().
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> ---
> include/sound/soc.h | 1 -
> sound/soc/soc-core.c | 18 ++----------------
> 2 files changed, 2 insertions(+), 17 deletions(-)
>
> diff --git a/include/sound/soc.h b/include/sound/soc.h
> index f264c65..d93cb46 100644
> --- a/include/sound/soc.h
> +++ b/include/sound/soc.h
> @@ -1148,7 +1148,6 @@ struct snd_soc_pcm_runtime {
> struct list_head component_list; /* list of connected components */
>
> /* bit field */
> - unsigned int dev_registered:1;
> unsigned int pop_wait:1;
> unsigned int fe_compr:1; /* for Dynamic PCM */
> };
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index b550fa9..552f460 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -368,6 +368,8 @@ static void soc_free_pcm_runtime(struct
> snd_soc_pcm_runtime *rtd)
>
> kfree(rtd->codec_dais);
> snd_soc_rtdcom_del_all(rtd);
> + if (rtd->dev)
> + device_unregister(rtd->dev); /* soc_release_rtd_dev */
> list_del(&rtd->list);
> kfree(rtd);
> }
> @@ -434,8 +436,6 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
> rtd->num = card->num_rtd;
> card->num_rtd++;
>
> - rtd->dev_registered = 1;
> -
> return rtd;
>
> free_rtd:
> @@ -1169,7 +1169,6 @@ static int soc_probe_dai(struct snd_soc_dai *dai,
> int order)
> return 0;
> }
>
> -static void soc_rtd_free(struct snd_soc_pcm_runtime *rtd); /* remove me */
> static void soc_remove_link_dais(struct snd_soc_card *card)
> {
> int i;
> @@ -1179,10 +1178,6 @@ static void soc_remove_link_dais(struct
> snd_soc_card *card)
>
> for_each_comp_order(order) {
> for_each_card_rtds(card, rtd) {
> -
> - /* finalize rtd device */
> - soc_rtd_free(rtd);
> -
> /* remove the CODEC DAI */
> for_each_rtd_codec_dai(rtd, i, codec_dai)
> soc_remove_dai(codec_dai, order);
> @@ -1460,15 +1455,6 @@ void snd_soc_remove_dai_link(struct snd_soc_card
> *card,
> }
> EXPORT_SYMBOL_GPL(snd_soc_remove_dai_link);
>
> -static void soc_rtd_free(struct snd_soc_pcm_runtime *rtd)
> -{
> - if (rtd->dev_registered) {
> - /* we don't need to call kfree() for rtd->dev */
>
Morimoto-san,
I think it is useful to keep this comment when you move soc_rtd_free() to
soc_free_pcm_runtime().
Thanks,
Ranjani
> - device_unregister(rtd->dev);
> - rtd->dev_registered = 0;
> - }
> -}
> -
> static int soc_link_dai_pcm_new(struct snd_soc_dai **dais, int num_dais,
> struct snd_soc_pcm_runtime *rtd)
> {
> --
> 2.7.4
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list