commit 95926035 upstream. The emu10k1 voice allocator takes voice_lock spinlock. When there is no empty stream available, it tries to release a voice used by synth, and calls get_synth_voice. The callback function, snd_emu10k1_synth_get_voice(), however, also takes the voice_lock, thus it deadlocks. The fix is simply removing the voice_lock holds in snd_emu10k1_synth_get_voice(), as this is always called in the spinlock context. Reported-and-tested-by:Arthur Marsh <arthur.marsh@internode.on.net> Signed-off-by:
Takashi Iwai <tiwai@suse.de> Signed-off-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
Makefile | Loading commit data... | |
emu10k1.c | Loading commit data... | |
emu10k1_callback.c | Loading commit data... | |
emu10k1_main.c | Loading commit data... | |
emu10k1_patch.c | Loading commit data... | |
emu10k1_synth.c | Loading commit data... | |
emu10k1_synth_local.h | Loading commit data... | |
emu10k1x.c | Loading commit data... | |
emufx.c | Loading commit data... | |
emumixer.c | Loading commit data... | |
emumpu401.c | Loading commit data... | |
emupcm.c | Loading commit data... | |
emuproc.c | Loading commit data... | |
io.c | Loading commit data... | |
irq.c | Loading commit data... | |
memory.c | Loading commit data... | |
p16v.c | Loading commit data... | |
p16v.h | Loading commit data... | |
p17v.h | Loading commit data... | |
timer.c | Loading commit data... | |
tina2.h | Loading commit data... | |
voice.c | Loading commit data... |