[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