summaryrefslogtreecommitdiffstats
path: root/sound/drivers/mpu401
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2005-11-18 18:52:14 +0100
committerJaroslav Kysela <perex@suse.cz>2006-01-03 12:29:08 +0100
commitb32425ac93370e1ba5556110e662f896b2e143b3 (patch)
treec5837ee90c16d2aa358e399f2ad79ca4eb770e94 /sound/drivers/mpu401
parent2eb061f41cf74f829bfe90a9c79c765172be9f0b (diff)
downloadlinux-b32425ac93370e1ba5556110e662f896b2e143b3.tar.gz
linux-b32425ac93370e1ba5556110e662f896b2e143b3.tar.bz2
linux-b32425ac93370e1ba5556110e662f896b2e143b3.zip
[ALSA] Fix possible races in timer callbacks
Fix possible races in timer callbacks. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/drivers/mpu401')
-rw-r--r--sound/drivers/mpu401/mpu401_uart.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
index ee67b522d259..8687ae3c66b8 100644
--- a/sound/drivers/mpu401/mpu401_uart.c
+++ b/sound/drivers/mpu401/mpu401_uart.c
@@ -133,12 +133,13 @@ irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id, struct pt_regs *reg
static void snd_mpu401_uart_timer(unsigned long data)
{
struct snd_mpu401 *mpu = (struct snd_mpu401 *)data;
+ unsigned long flags;
- spin_lock(&mpu->timer_lock);
+ spin_lock_irqsave(&mpu->timer_lock, flags);
/*mpu->mode |= MPU401_MODE_TIMER;*/
mpu->timer.expires = 1 + jiffies;
add_timer(&mpu->timer);
- spin_unlock(&mpu->timer_lock);
+ spin_unlock_irqrestore(&mpu->timer_lock, flags);
if (mpu->rmidi)
_snd_mpu401_uart_interrupt(mpu);
}