ASoC: core: Move pcm_mutex up to card level from snd_soc_pcm_runtime
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Tue, 13 Aug 2019 10:45:32 +0000 (13:45 +0300)
committerMark Brown <broonie@kernel.org>
Thu, 15 Aug 2019 14:07:43 +0000 (15:07 +0100)
commit72b745e3ad65deac94ea4eb83262c52ba3ffdb5b
treea5850d63c1e97e8fc8d4a6e1f29b8d6e181b112a
parent12f0bfadf69bb154052722e7e4e5cd1639044c76
ASoC: core: Move pcm_mutex up to card level from snd_soc_pcm_runtime

The pcm_mutex is used to prevent concurrent execution of snd_pcm_ops
callbacks. This works fine most of the cases but it can not handle setups
when the same DAI is used by different rtd, for example:
pcm3168a have two DAIs: one for Playback and one for Capture.
If the codec is connected to a single CPU DAI we need to have two dai_link
to support both playback and capture.

In this case the snd_pcm_ops callbacks can be executed in parallel causing
unexpected races in DAI drivers.

By moving the pcm_mutex up to card level this can be solved
while - hopefully - not breaking other setups.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20190813104532.16669-1-peter.ujfalusi@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc.h
sound/soc/soc-compress.c
sound/soc/soc-core.c
sound/soc/soc-pcm.c