Hi Ranjani Thank you for your confirming. Can you give it your Acked-by ? It is easy for Mark, I think. > > > From: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > > > > > commit 34ac3c3eb8f0c07 ("ASoC: core: lock client_mutex while > > > removing > > > link components") added mutex_lock() at > > > soc_remove_link_components(). > > > > > > Is is called from snd_soc_unbind_card() > > > > > > snd_soc_unbind_card() > > > => soc_remove_link_components() > > > soc_cleanup_card_resources() > > > soc_remove_dai_links() > > > => soc_remove_link_components() > > > > > > And, there are 2 way to call it. > > > > > > (1) > > > snd_soc_unregister_component() > > > ** mutex_lock() > > > snd_soc_component_del_unlocked() > > > => snd_soc_unbind_card() > > > ** mutex_unlock() > > > > > > (2) > > > snd_soc_unregister_card() > > > => snd_soc_unbind_card() > > > > > > (1) case is already using mutex_lock() when it calles > > > snd_soc_unbind_card(), thus, we will get lockdep warning. > > Thanks, morimoto-san. You are correct. Case 1 will result in a lockdep > warning. This patch looks good. > > Thanks, > Ranjani > > > > > > commit 495f926c68ddb90 ("ASoC: core: Fix deadlock in > > > snd_soc_instantiate_card()") tried to fixup it, but still not > > > enough. We still have lockdep warning when we try unbind/bind. > > > > > > We need mutex_lock() under snd_soc_unregister_card() > > > instead of snd_remove_link_components()/snd_soc_unbind_card(). > > > > > > Fixes: 34ac3c3eb8f0c07 ("ASoC: core: lock client_mutex while > > > removing link components") > > > Fixes: 495f926c68ddb90 ("ASoC: core: Fix deadlock in > > > snd_soc_instantiate_card()") > > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > > --- > > > sound/soc/soc-core.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c > > > index 2353886..2a408cc 100644 > > > --- a/sound/soc/soc-core.c > > > +++ b/sound/soc/soc-core.c > > > @@ -2747,14 +2747,12 @@ static void snd_soc_unbind_card(struct > > > snd_soc_card *card, bool unregister) > > > snd_soc_dapm_shutdown(card); > > > snd_soc_flush_all_delayed_work(card); > > > > > > - mutex_lock(&client_mutex); > > > /* remove all components used by DAI links on this card > > > */ > > > for_each_comp_order(order) { > > > for_each_card_rtds(card, rtd) { > > > soc_remove_link_components(card, rtd, > > > order); > > > } > > > } > > > - mutex_unlock(&client_mutex); > > > > > > soc_cleanup_card_resources(card); > > > if (!unregister) > > > @@ -2773,7 +2771,9 @@ static void snd_soc_unbind_card(struct > > > snd_soc_card *card, bool unregister) > > > */ > > > int snd_soc_unregister_card(struct snd_soc_card *card) > > > { > > > + mutex_lock(&client_mutex); > > > snd_soc_unbind_card(card, true); > > > + mutex_unlock(&client_mutex); > > > dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card- > > > >name); > > > > > > return 0; > > > -- > > > 2.7.4 > > > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel