diff options
| author | Keyon Jie <[email protected]> | 2019-06-12 12:23:41 -0500 |
|---|---|---|
| committer | Mark Brown <[email protected]> | 2019-06-17 13:44:50 +0100 |
| commit | 7fd572e7d317fa51049d623badb8b2874bfd0119 (patch) | |
| tree | 1bf4759fdf3345c0e519ea77cc14d8f8661ccbc7 /tools/perf/scripts/python | |
| parent | 6297a0dc4c14a62bea5a9137ceef280cb7a80665 (diff) | |
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 <[email protected]>
Signed-off-by: Keyon Jie <[email protected]>
Signed-off-by: Pierre-Louis Bossart <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions