diff options
| author | Jiri Slaby <jirislaby@gmail.com> | 2009-06-29 12:03:34 -0400 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2009-06-29 12:05:52 -0400 |
| commit | 9ea5ca75a2aebb7172094a7d77acf6ff7600cc56 (patch) | |
| tree | 2fc0f2d554feaac4c23ec7c84334db30d7decbd4 | |
| parent | 580c9d373ce7ccfbc5227e985fca761f8f039af3 (diff) | |
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>
| -rw-r--r-- | sound/oss/mpu401.c | 16 |
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]; | |||
| 926 | static void mpu401_chk_version(int n, struct mpu_config *devc) | 926 | static void mpu401_chk_version(int n, struct mpu_config *devc) |
| 927 | { | 927 | { |
| 928 | int tmp; | 928 | int tmp; |
| 929 | unsigned long flags; | ||
| 930 | 929 | ||
| 931 | devc->version = devc->revision = 0; | 930 | devc->version = devc->revision = 0; |
| 932 | 931 | ||
| 933 | spin_lock_irqsave(&devc->lock,flags); | 932 | tmp = mpu_cmd(n, 0xAC, 0); |
| 934 | if ((tmp = mpu_cmd(n, 0xAC, 0)) < 0) | 933 | if (tmp < 0) |
| 935 | { | ||
| 936 | spin_unlock_irqrestore(&devc->lock,flags); | ||
| 937 | return; | 934 | return; |
| 938 | } | ||
| 939 | if ((tmp & 0xf0) > 0x20) /* Why it's larger than 2.x ??? */ | 935 | if ((tmp & 0xf0) > 0x20) /* Why it's larger than 2.x ??? */ |
| 940 | { | ||
| 941 | spin_unlock_irqrestore(&devc->lock,flags); | ||
| 942 | return; | 936 | return; |
| 943 | } | ||
| 944 | devc->version = tmp; | 937 | devc->version = tmp; |
| 945 | 938 | ||
| 946 | if ((tmp = mpu_cmd(n, 0xAD, 0)) < 0) | 939 | if ((tmp = mpu_cmd(n, 0xAD, 0)) < 0) { |
| 947 | { | ||
| 948 | devc->version = 0; | 940 | devc->version = 0; |
| 949 | spin_unlock_irqrestore(&devc->lock,flags); | ||
| 950 | return; | 941 | return; |
| 951 | } | 942 | } |
| 952 | devc->revision = tmp; | 943 | devc->revision = tmp; |
| 953 | spin_unlock_irqrestore(&devc->lock,flags); | ||
| 954 | } | 944 | } |
| 955 | 945 | ||
| 956 | int attach_mpu401(struct address_info *hw_config, struct module *owner) | 946 | int attach_mpu401(struct address_info *hw_config, struct module *owner) |
