[alsa-devel] [PATCH 1/6] ASoC: soc-core: use devm_kzalloc() for rtd
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Thu Oct 3 02:56:42 CEST 2019
Hi Mark, again
> > > From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> >
> > > Current rtd, rtd->dev, rtd->codec_dais are created by normal kzalloc(),
> > > but we want to use devm_kzalloc() as much as possible.
> > >
> > > Created rtd->dev is registered by device_register() at
> > > soc_new_pcm_runtime(), and it will be freed at
> > > soc_free_pcm_runtime() by device_unregister().
> >
> > These aren't using devm_ because they are done at card init time and so
> > might happen multiple times when other card components get removed and
> > added. This shouldn't happen too much but if it does then it could end
> > up consuming a noticeable amount of memory.
>
> I see.
> Actually my local patch which is not yet posted can solve this
> multiple times issue.
> Mergeing these can be good solution.
> Please drop it so far.
Oops, it was alreay posted and accepted :)
d918a37610b1bf71faa86f589bd7604f71c1e05f
("ASoC: soc-core: tidyup soc_new_pcm_runtime() alloc order")
above rtd, rtd->codec_dais are devm_kzalloc() by original dev
(which will be rtd->dev) instead of card/component dev.
It is registered by device_register() at soc_new_pcm_runtime(),
and will be unregistered by device_unregister() at soc_free_pcm_runtime()
when card was removed.
It is a little bit tricky, but
these are chain-freed when card was removed.
If my understanding was correct, we don't have memory leak
by multiple times card/components remove.
But, please double check.
user removed card
-> snd_soc_unbind_card()
-> soc_cleanup_card_resources()
-> soc_remove_pcm_runtimes()
-> soc_free_pcm_runtime()
(*) -> device_unregister(rtd->dev);
rtd->dev will be kfree() by soc_release_rtd_dev at (*),
then, rtd, rtd->codec_dais will be kfree() via devm_
Thank you for your help !!
Best regards
---
Kuninori Morimoto
More information about the Alsa-devel
mailing list