[alsa-devel] [PATCH] ASoC: codecs: tlv320aic3x: Remove deadlock from snd_soc_dapm_put_volsw_aic3x()
From: Andreas Irestål Andreas.Irestal@axis.com
When calling snd_soc_dapm_sync(), it eventually tries to lock the same mutex already locked in snd_soc_dapm_put_volsw_aic3x() and a deadlock occurs. By moving the mutex unlock to just before snd_soc_dapm_sync(), this deadlock is prevented. This problem was introduced in Linux 3.5
Signed-off-by: Andreas Irestål Andreas.Irestal@axis.com --- sound/soc/codecs/tlv320aic3x.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index 65d09d6..1514bf8 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c @@ -187,14 +187,14 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol,
break; } - - if (found) - snd_soc_dapm_sync(widget->dapm); }
- ret = snd_soc_update_bits(widget->codec, reg, val_mask, val); - mutex_unlock(&widget->codec->mutex); + + if (found) + snd_soc_dapm_sync(widget->dapm); + + ret = snd_soc_update_bits_locked(widget->codec, reg, val_mask, val); return ret; }
On Wed, Jun 05, 2013 at 08:49:47AM +0200, Andreas Irestal wrote:
From: Andreas Irestål Andreas.Irestal@axis.com
When calling snd_soc_dapm_sync(), it eventually tries to lock the same mutex already locked in snd_soc_dapm_put_volsw_aic3x() and a deadlock occurs. By moving the mutex unlock to just before snd_soc_dapm_sync(), this deadlock is prevented. This problem was introduced in Linux 3.5
Applied but as covered in Documentation/SubmittingPatches you should *always* CC maintainers on patches.
participants (2)
-
Andreas Irestal
-
Mark Brown