On Mon, 03 Apr 2017 08:29:34 +0200, Kuninori Morimoto wrote: > > > Hi Takashi-san > > > > I think this is a good direction to at least start to mitigate these > > > problems (which we really should be doing) and hopefully make it easier > > > to do further improvements in future. There's obviously more places > > > where we should be checking the flag (controls for example) but they can > > > be added later. One thing I would like to see is instead of setting the > > > flag directly when we see a problem call a function to do it. That way > > > if we want to improve things in the future we can do that without having > > > to update the callers again. > > > > BTW, ALSA core has snd_card_disconnect() that does this kind of > > shut-up from user-space. It was introduced for hot-unplug, but > > basically unbinding is the software hot-unplug. So, if ASoC won't > > rebind a once-unbound component, you can simply call > > snd_card_disconnect() at the component unbinding time to assure that > > no further user actions can be done. > > Thanks. I checked about snd_card_disconnect(), and it will be called > from snd_card_free(). And it will be called from snd_soc_unregister_card() Yes, snd_card_free() assures the disconnection at first, syncs the all settled down, then releases the resources. > So, we can call snd_soc_unregister_card() whenever CPU/Codec/Platform > were unregsiterd. In theory yes, but you should be careful to do so, e.g. make sure that it won't be called again by the removal/unbind of other components / drivers. I suggested snd_card_disconnect() because it doesn't release resources by itself, but it just disconnects from the further accesses. So, double-free won't happen in this case. It makes the hotunplug safer as long as the drivers manage the resource releases properly. Takashi > This method also solve random unbind/bind Oops too. > Here, random unbind/bind example is that > expected correct operation is unbind all CPU/Codec/Platfrom/Card, > and then, bind all CPU/Codec/Platfrom/Card again. > (here unbind order can be random) > But this case, we will get Oops if unbind Codec -> bind Codec -> unbind Card. > Using snd_soc_unregister_card() can solve this issue too. > > Best regards > --- > Kuninori Morimoto > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel