]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] oss/wavfront.c - convert cli to spinlocks
authorPeter Wächtler <pwaechtler@mac.com>
Fri, 30 Aug 2002 08:30:29 +0000 (01:30 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Fri, 30 Aug 2002 08:30:29 +0000 (01:30 -0700)
sound/oss/wavfront.c

index 5b084983d7fa0834ced84f8b42f3c492f250211c..f3d8339bd14134d43efef2b5dfd18a4f42820c3a 100644 (file)
@@ -76,7 +76,7 @@
 #include <linux/ptrace.h>
 #include <linux/fcntl.h>
 #include <linux/ioport.h>    
-
+#include <linux/spinlock.h>
 #include <linux/interrupt.h>
 #include <linux/config.h>
 
@@ -274,6 +274,7 @@ struct wf_config {
        wait_queue_head_t interrupt_sleeper; 
 } dev;
 
+static spinlock_t lock=SPIN_LOCK_UNLOCKED;
 static int  detect_wffx(void);
 static int  wffx_ioctl (wavefront_fx_info *);
 static int  wffx_init (void);
@@ -2202,12 +2203,12 @@ wavefront_should_cause_interrupt (int val, int port, int timeout)
 {
        unsigned long flags;
 
-       save_flags (flags);
-       cli();
+       /* this will not help on SMP - but at least it compiles */
+       spin_lock_irqsave(&lock, flags);
        dev.irq_ok = 0;
        outb (val,port);
        interruptible_sleep_on_timeout (&dev.interrupt_sleeper, timeout);
-       restore_flags (flags);
+       spin_unlock_irqrestore(&lock,flags);
 }
 
 static int __init wavefront_hw_reset (void)
@@ -2223,8 +2224,6 @@ static int __init wavefront_hw_reset (void)
 
        printk (KERN_DEBUG LOGNAME "autodetecting WaveFront IRQ\n");
 
-       sti ();
-
        irq_mask = probe_irq_on ();
 
        outb (0x0, dev.control_port);