On Mon, Feb 10, 2014 at 02:05:26PM +0100, Takashi Iwai wrote: > At Mon, 10 Feb 2014 11:05:36 +0000, > Charles Keepax wrote: > > <snip> > > > Actually, this fixes also the double-lock in snd_soc_dapm_sync() call > in the line below the above. snd_soc_dapm_sync() itself takes > mutex_lock_nested().
Yeah spotted that as I was going through will do this in a seperate patch if this one doesn't go in. <snip> > > static int arizona_haptics_probe(struct platform_device *pdev) > > diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c > > index dc8ff13..a44b560 100644 > > --- a/sound/soc/soc-dapm.c > > +++ b/sound/soc/soc-dapm.c > > @@ -2325,6 +2325,8 @@ static int snd_soc_dapm_set_pin(struct > > snd_soc_dapm_context *dapm, > > { > > struct snd_soc_dapm_widget *w = dapm_find_widget(dapm, pin, true); > > > > + mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); > > + > > if (!w) { > > dev_err(dapm->dev, "ASoC: DAPM unknown pin %s\n", pin); > > return -EINVAL; > > Missing unlock here. Good spot thanks, I will update for this. > > > > @@ -2337,6 +2339,8 @@ static int snd_soc_dapm_set_pin(struct > > snd_soc_dapm_context *dapm, > > if (status == 0) > > w->force = 0; > > > > + mutex_unlock(&dapm->card->dapm_mutex); > > + > > return 0; > > } > > > > @@ -3210,15 +3214,11 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol > > *kcontrol, > > struct snd_soc_card *card = snd_kcontrol_chip(kcontrol); > > const char *pin = (const char *)kcontrol->private_value; > > > > - mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); > > - > > if (ucontrol->value.integer.value[0]) > > snd_soc_dapm_enable_pin(&card->dapm, pin); > > else > > snd_soc_dapm_disable_pin(&card->dapm, pin); > > > > - mutex_unlock(&card->dapm_mutex); > > - > > snd_soc_dapm_sync(&card->dapm); > > return 0; > > } > > I guess you forgot patching snd_soc_dapm_force_enable_pin()? > It's now left unprotected after this patch. Also a good point, thanks I will update. > > > Takashi Thanks, Charles -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/