aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-07-02 20:03:48 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-07-02 20:03:48 -0700
commitbec7fcacd7f60fa70e5dbe13fc087d85d5d1f07b (patch)
treea6c0c31b9f1c360c412c814e04ea67773a221795 /sound
parentc8c702b171d4cb16b28d4a4764cffde57a53f661 (diff)
downloadhistory-bec7fcacd7f60fa70e5dbe13fc087d85d5d1f07b.tar.gz
[PATCH] err1-14: sb_audio locking fix
Lamely fix a straightforward deadlock in sb_audio.c. Founf by the Stanford locking checker. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/oss/sb_audio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/oss/sb_audio.c b/sound/oss/sb_audio.c
index 40914dd0c6817a..75e54f6f638a1d 100644
--- a/sound/oss/sb_audio.c
+++ b/sound/oss/sb_audio.c
@@ -519,9 +519,11 @@ static int sbpro_audio_prepare_for_output(int dev, int bsize, int bcount)
sb_dsp_command(devc, 0xa0 | bits); /* Mono output */
else
sb_dsp_command(devc, 0xa8 | bits); /* Stereo output */
+ spin_unlock_irqrestore(&devc->lock, flags);
}
else
{
+ spin_unlock_irqrestore(&devc->lock, flags);
tmp = sb_getmixer(devc, 0x0e);
if (devc->channels == 1)
tmp &= ~0x02;
@@ -529,7 +531,6 @@ static int sbpro_audio_prepare_for_output(int dev, int bsize, int bcount)
tmp |= 0x02;
sb_setmixer(devc, 0x0e, tmp);
}
- spin_unlock_irqrestore(&devc->lock, flags);
devc->trigger_bits = 0;
return 0;
}