summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorJiri Slaby <jirislaby@gmail.com>2009-06-29 18:03:34 +0200
committerTakashi Iwai <tiwai@suse.de>2009-06-29 18:05:52 +0200
commit9ea5ca75a2aebb7172094a7d77acf6ff7600cc56 (patch)
tree2fc0f2d554feaac4c23ec7c84334db30d7decbd4 /sound
parent580c9d373ce7ccfbc5227e985fca761f8f039af3 (diff)
downloadlinux-9ea5ca75a2aebb7172094a7d77acf6ff7600cc56.tar.gz
linux-9ea5ca75a2aebb7172094a7d77acf6ff7600cc56.tar.bz2
linux-9ea5ca75a2aebb7172094a7d77acf6ff7600cc56.zip
sound: OSS: mpu401, fix deadlock
mpu401_chk_version is called with a spin lock already held. Don't take it again. Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/oss/mpu401.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c
index 6c0a770ed054..1b2316f35b1f 100644
--- a/sound/oss/mpu401.c
+++ b/sound/oss/mpu401.c
@@ -926,31 +926,21 @@ static struct midi_operations mpu401_midi_operations[MAX_MIDI_DEV];
static void mpu401_chk_version(int n, struct mpu_config *devc)
{
int tmp;
- unsigned long flags;
devc->version = devc->revision = 0;
- spin_lock_irqsave(&devc->lock,flags);
- if ((tmp = mpu_cmd(n, 0xAC, 0)) < 0)
- {
- spin_unlock_irqrestore(&devc->lock,flags);
+ tmp = mpu_cmd(n, 0xAC, 0);
+ if (tmp < 0)
return;
- }
if ((tmp & 0xf0) > 0x20) /* Why it's larger than 2.x ??? */
- {
- spin_unlock_irqrestore(&devc->lock,flags);
return;
- }
devc->version = tmp;
- if ((tmp = mpu_cmd(n, 0xAD, 0)) < 0)
- {
+ if ((tmp = mpu_cmd(n, 0xAD, 0)) < 0) {
devc->version = 0;
- spin_unlock_irqrestore(&devc->lock,flags);
return;
}
devc->revision = tmp;
- spin_unlock_irqrestore(&devc->lock,flags);
}
int attach_mpu401(struct address_info *hw_config, struct module *owner)