]> git.ipfire.org Git - people/ms/linux.git/commit
ALSA: emu10k1: Fix deadlock in synth voice lookup
authorTakashi Iwai <tiwai@suse.de>
Mon, 13 Oct 2014 21:18:02 +0000 (23:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Oct 2014 16:43:11 +0000 (09:43 -0700)
commita1c2070f773fbafe16af1b89cc05672588d3dc61
tree2b5672f8145c7eaca8476abb29ddb2cffe53a432
parent0608517bdd061083b20e7046758ce8a23c36103b
ALSA: emu10k1: Fix deadlock in synth voice lookup

commit 95926035b187cc9fee6fb61385b7da9c28123f74 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>
sound/pci/emu10k1/emu10k1_callback.c