]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/char/snsc.c
Merge tag 'v2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / char / snsc.c
index 32b74de18f5face7e590ac25fc955aef373c6247..5816b39ff5a9cf43cbba56579d9b0b2d021f8883 100644 (file)
@@ -21,7 +21,7 @@
 #include <linux/poll.h>
 #include <linux/module.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <asm/sn/io.h>
 #include <asm/sn/sn_sal.h>
 #include <asm/sn/module.h>
@@ -34,6 +34,7 @@
 #define SCDRV_BUFSZ    2048
 #define SCDRV_TIMEOUT  1000
 
+static DEFINE_MUTEX(scdrv_mutex);
 static irqreturn_t
 scdrv_interrupt(int irq, void *subch_data)
 {
@@ -105,7 +106,7 @@ scdrv_open(struct inode *inode, struct file *file)
        file->private_data = sd;
 
        /* hook this subchannel up to the system controller interrupt */
-       lock_kernel();
+       mutex_lock(&scdrv_mutex);
        rv = request_irq(SGI_UART_VECTOR, scdrv_interrupt,
                         IRQF_SHARED | IRQF_DISABLED,
                         SYSCTL_BASENAME, sd);
@@ -113,10 +114,10 @@ scdrv_open(struct inode *inode, struct file *file)
                ia64_sn_irtr_close(sd->sd_nasid, sd->sd_subch);
                kfree(sd);
                printk("%s: irq request failed (%d)\n", __func__, rv);
-               unlock_kernel();
+               mutex_unlock(&scdrv_mutex);
                return -EBUSY;
        }
-       unlock_kernel();
+       mutex_unlock(&scdrv_mutex);
        return 0;
 }
 
@@ -357,6 +358,7 @@ static const struct file_operations scdrv_fops = {
        .poll =         scdrv_poll,
        .open =         scdrv_open,
        .release =      scdrv_release,
+       .llseek =       noop_llseek,
 };
 
 static struct class *snsc_class;