From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de ([195.135.220.15]:48077 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751215AbdDCGlX (ORCPT ); Mon, 3 Apr 2017 02:41:23 -0400 Date: Mon, 03 Apr 2017 08:41:20 +0200 Message-ID: From: Takashi Iwai To: Kuninori Morimoto Cc: Mark Brown , Linux-Renesas , Linux-ALSA , Lars-Peter , Simon Subject: Re: [alsa-devel] [RFC][PATCH] ASoC: soc-core: verify Sound Card normality In-Reply-To: <878tninh21.wl%kuninori.morimoto.gx@renesas.com> References: <87vaqsajo0.wl%kuninori.morimoto.gx@renesas.com> <20170330215334.zwashvjerpfnkk3u@sirena.org.uk> <878tninh21.wl%kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: 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 >