linux/sound
Keyon Jie 7fd572e7d3
ASoC: SOF: Intel: hda-stream: fix a deadlock with bus->reg_lock
We should use irq disabled mode when read/write hda registers from
thread context, as we need to hold the same bus->reg_lock in interrupt
context hda_dsp_stream_interrupt(), otherwise, when we are holding the
lock in hda_dsp_stream_hw_free() and the interrupt arrives, we will get
deadlock in the interrupt handler.

Error logs like this:

[    5.603606]        CPU0
[    5.603606]        ----
[    5.603607]   lock(&(&bus->reg_lock)->rlock);
[    5.603608]   <Interrupt>
[    5.603609]     lock(&(&bus->reg_lock)->rlock);
[    5.603610]
                *** DEADLOCK ***

[    5.603611] 2 locks held by pulseaudio/2329:
[    5.603612]  #0: 000000005fcf26c6 (&card->mutex/1){+.+.}, at: dpcm_fe_dai_hw_free+0x2b/0x110 [snd_soc_core]
[    5.603619]  #1: 00000000ef369faf (&rtd->pcm_mutex){+.+.}, at: soc_pcm_hw_free+0x2e/0x1c0 [snd_soc_core]

The fix is simple, let's switch to use spin_lock/unlock_irq().

Reported-by: Xun Zhang <xun2.zhang@intel.com>
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
2019-06-17 13:44:50 +01:00
..
ac97 ALSA: ac97: Fix of-node refcount unbalance 2019-02-19 22:20:14 +01:00
aoa ALSA: aoa: Fix of-node refcount unbalance 2019-02-19 22:20:45 +01:00
arm ALSA: arm: Avoid passing NULL to memory allocators 2019-02-04 16:51:46 +01:00
atmel ALSA: atmel: Drop superfluous PCM preallocation error checks 2019-02-06 10:28:39 +01:00
core sound updates for 5.2-rc1 2019-05-09 08:26:55 -07:00
drivers ALSA: aloop: Support S24 sample formats 2019-03-25 16:39:18 +01:00
firewire ALSA: firewire-lib: use 8 byte header for IR context to get isochronous cycle 2019-03-18 14:50:35 +01:00
hda Merge branch 'asoc-5.2' into asoc-5.3 2019-06-06 22:44:24 +01:00
i2c ALSA: i2c: Clean up with new procfs helpers 2019-02-06 18:11:56 +01:00
isa ALSA: gus: fix misuse of %x 2019-04-28 08:25:18 +02:00
mips ALSA: mips: pass struct device to DMA API functions 2019-02-01 17:15:44 +01:00
oss
parisc ALSA: parisc: Drop superfluous PCM preallocation error checks 2019-02-06 10:29:03 +01:00
pci Merge branch 'asoc-5.2' into asoc-5.3 2019-06-03 18:38:15 +01:00
pcmcia ALSA: pcmcia: Clean up with new procfs helpers 2019-02-06 18:11:57 +01:00
ppc ALSA: ps3: Remove set but not used variables 'start_vaddr' and 'pcm_index' 2019-04-17 21:17:54 +02:00
sh ALSA: aica: Fix a long-time build breakage 2019-05-08 14:48:01 +02:00
soc ASoC: SOF: Intel: hda-stream: fix a deadlock with bus->reg_lock 2019-06-17 13:44:50 +01:00
sparc ASoC: Updates for v5.1 2019-02-08 14:20:32 +01:00
spi ALSA: spi: Drop superfluous PCM preallocation error checks 2019-02-06 10:29:36 +01:00
synth ALSA: synth: emux: soundfont.c: divide by zero in calc_gus_envelope_time() 2019-05-06 15:08:08 +02:00
usb sound updates for 5.2-rc1 2019-05-09 08:26:55 -07:00
x86 ALSA: x86: Avoid passing NULL to memory allocators 2019-02-04 16:51:34 +01:00
xen ALSA: xen-front: Do not use stream buffer size before it is set 2019-04-04 14:44:18 +02:00
ac97_bus.c
Kconfig
last.c ALSA: core: Don't refer to snd_cards array directly 2019-04-17 07:16:15 +02:00
Makefile
sound_core.c