[alsa-devel] [PATCH] ASoC: soc-core: call soc_cleanup_card_debugfs() from snd_soc_unregister_card()

Takashi Iwai tiwai at suse.de
Tue Mar 24 09:35:49 CET 2015


At Tue, 24 Mar 2015 08:17:13 +0000,
Kuninori Morimoto wrote:
> 
> Hi Takashi
> 
> Thank you for your feedback
> 
> > If the reason is different (e.g. for further fix of hot unplug bug),
> > it'd be understandable, though.  In general, the ALSA device free
> > consists of three phases:
> > 1. device disconnection
> > 2. wait until all devices are closed
> > 3. actual free all resources
> > 
> > And soc_cleanup_card_debugfs() basically belongs to 1, not 3.
> 
> Hmm... I'm not 100% understand detail of ASoC functions,
> but if so, debugfs should be created when "device connect", but
> current code is creating it in "device register".

Note that there is no "device connect" phase in ALSA.  It's called
before snd_card_register(), so it's an "init" phase.  The "device
connect" phase is invoked at snd_card_register().

> Can I assume that snd_soc_instantiate_card() <-> soc_cleanup_card_resources() are
> paired function ? I'm not sure...
> Anyway, it is easy to understand for me if
> paired functions are called from paired parent functions if possible.
> Currently debugfs is like this.
> 
> snd_soc_register_card()       <-> snd_soc_unregister_card()
>  - soc_init_card_debugfs()           ????
>  - snd_soc_instantiate_card() <->  - soc_cleanup_card_resources()
>    - soc_bind_dai_link()             - soc_remove_dai_links()
>    - soc_probe_aux_dev()             - soc_remove_aux_dev()
>    - card->probe()                   - card->remove()
>    - ????                            - soc_cleanup_card_debugfs()

IMO, a better change would be to call soc_init_card_debugfs() in
snd_soc_instantiate_card(), supposing that the debugfs is available
only for instantiated objects.  This will fix the messy leakage at
error paths, too.


Takashi


More information about the Alsa-devel mailing list