Hi Mark, again > > > From: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > > > > 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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel