]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/serio/serio_raw.c
Merge branch 'for-2.6.27' of git://linux-nfs.org/~bfields/linux
[linux-2.6-omap-h63xx.git] / drivers / input / serio / serio_raw.c
index 7c8d0399ae820ae6996f888f07910126bc3607f6..c9397c8ee97e8ea44c4f0edc4a6172bd022178ac 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include <linux/slab.h>
+#include <linux/smp_lock.h>
 #include <linux/poll.h>
 #include <linux/module.h>
 #include <linux/serio.h>
@@ -81,9 +82,10 @@ static int serio_raw_open(struct inode *inode, struct file *file)
        struct serio_raw_list *list;
        int retval = 0;
 
+       lock_kernel();
        retval = mutex_lock_interruptible(&serio_raw_mutex);
        if (retval)
-               return retval;
+               goto out_bkl;
 
        if (!(serio_raw = serio_raw_locate(iminor(inode)))) {
                retval = -ENODEV;
@@ -108,6 +110,8 @@ static int serio_raw_open(struct inode *inode, struct file *file)
 
 out:
        mutex_unlock(&serio_raw_mutex);
+out_bkl:
+       unlock_kernel();
        return retval;
 }
 
@@ -160,7 +164,7 @@ static ssize_t serio_raw_read(struct file *file, char __user *buffer, size_t cou
 {
        struct serio_raw_list *list = file->private_data;
        struct serio_raw *serio_raw = list->serio_raw;
-       char c;
+       char uninitialized_var(c);
        ssize_t retval = 0;
 
        if (!serio_raw->serio)
@@ -234,7 +238,7 @@ static unsigned int serio_raw_poll(struct file *file, poll_table *wait)
        return 0;
 }
 
-static struct file_operations serio_raw_fops = {
+static const struct file_operations serio_raw_fops = {
        .owner =        THIS_MODULE,
        .open =         serio_raw_open,
        .release =      serio_raw_release,
@@ -389,8 +393,7 @@ static struct serio_driver serio_raw_drv = {
 
 static int __init serio_raw_init(void)
 {
-       serio_register_driver(&serio_raw_drv);
-       return 0;
+       return serio_register_driver(&serio_raw_drv);
 }
 
 static void __exit serio_raw_exit(void)