[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