linux-stable/sound
Claudiu Beznea d3681df44e
ASoC: mchp-spdifrx: fix controls that works with completion mechanism
Channel status get and channel subcode get controls relies on data
returned by controls when certain IRQs are raised. To achieve that
completions are used b/w controls and interrupt service routine. The
concurrent accesses to these controls are protected by
struct snd_card::controls_rwsem.

Issues identified:
- reinit_completion() may be called while waiting for completion
  which should be avoided
- in case of multiple threads waiting, the complete() call in interrupt
  will signal only one waiting thread per interrupt which may lead to
  timeout for the others
- in case of channel status get as the CSC interrupt is not refcounted
  ISR may disable interrupt for threads that were just enabled it.

To solve these the access to controls were protected by a mutex. Along
with this there is no need for spinlock to protect the software cache
reads/updates b/w controls and ISR as the update is happening only when
requested from control, and only one reader can reach the control.

Fixes: ef265c55c1 ("ASoC: mchp-spdifrx: add driver for SPDIF RX")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20230130120647.638049-4-claudiu.beznea@microchip.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2023-01-30 18:36:21 +00:00
..
ac97
aoa ALSA: aoa: tas: Convert to i2c's .probe_new() 2022-11-19 09:43:27 +01:00
arm ALSA: arm: pxa: pxa2xx-ac97-lib: fix return value check of platform_get_irq() 2022-10-29 10:45:27 +02:00
atmel
core Merge branch 'for-next' into for-linus 2022-12-22 09:11:48 +01:00
drivers ALSA: mts64: fix possible null-ptr-defer in snd_mts64_interrupt 2022-12-06 11:12:12 +01:00
firewire Merge branch 'for-next' into for-linus 2022-12-22 09:11:48 +01:00
hda ALSA: hda: Error out if invalid stream is being setup 2022-12-09 09:54:53 +01:00
i2c treewide: Convert del_timer*() to timer_shutdown*() 2022-12-25 13:38:09 -08:00
isa
mips
oss
parisc
pci ALSA: azt3328: Remove the unused function snd_azf3328_codec_outl() 2022-12-22 09:12:26 +01:00
pcmcia
ppc ALSA: ppc: keywest: Convert to i2c's .probe_new() 2022-11-19 09:43:50 +01:00
sh
soc ASoC: mchp-spdifrx: fix controls that works with completion mechanism 2023-01-30 18:36:21 +00:00
sparc
spi
synth treewide: Convert del_timer*() to timer_shutdown*() 2022-12-25 13:38:09 -08:00
usb ALSA: usb-audio: Add new quirk FIXED_RATE for JBL Quantum810 Wireless 2022-12-22 09:13:54 +01:00
virtio
x86
xen
ac97_bus.c
Kconfig
last.c
Makefile
sound_core.c driver core: make struct class.devnode() take a const * 2022-11-24 17:12:27 +01:00