The following commit has been merged in the linux branch: commit 8e8b2d676f3f7c1246b108793fb5690e6c6fcd26 Author: Eero Nurkkala ext-eero.nurkkala@nokia.com Date: Mon Oct 12 08:41:59 2009 +0300
ASoC: Serialize access to dapm_power_widgets()
Access to damp_power_widgets() is assumed to be single-threaded. Concurrent accesses to dapm_power_widgets() may result in unpredictable behavior.
Calls from: close_delayed_work() soc_codec_close() soc_pcm_prepare() soc_suspend() soc_resume_deferred() to snd_soc_dapm_stream_event() do not have the codec->mutex taken to cover the call to dapm_power_widgets(). Thus, take the mutex in these paths also to assure single-threaded use of dapm_power_widgets().
Signed-off-by: Eero Nurkkala ext-eero.nurkkala@nokia.com Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 8de6f9d..d89f6dc 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2072,9 +2072,9 @@ int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, } } } - mutex_unlock(&codec->mutex);
dapm_power_widgets(codec, event); + mutex_unlock(&codec->mutex); dump_dapm(codec, __func__); return 0; }