]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/char/lp.c
Merge branch 'master' into csb1725
[mv-sheeva.git] / drivers / char / lp.c
index 938a3a2738866c71e42b7d8112b29966cdf3417c..97c3edb95ae747a3ff2832f48e6daf098fad83bf 100644 (file)
 #include <linux/device.h>
 #include <linux/wait.h>
 #include <linux/jiffies.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/compat.h>
 
 #include <linux/parport.h>
 /* if you have more than 8 printers, remember to increase LP_NO */
 #define LP_NO 8
 
+static DEFINE_MUTEX(lp_mutex);
 static struct lp_struct lp_table[LP_NO];
 
 static unsigned int lp_count = 0;
@@ -493,7 +494,7 @@ static int lp_open(struct inode * inode, struct file * file)
        unsigned int minor = iminor(inode);
        int ret = 0;
 
-       lock_kernel();
+       mutex_lock(&lp_mutex);
        if (minor >= LP_NO) {
                ret = -ENXIO;
                goto out;
@@ -554,7 +555,7 @@ static int lp_open(struct inode * inode, struct file * file)
        lp_release_parport (&lp_table[minor]);
        lp_table[minor].current_mode = IEEE1284_MODE_COMPAT;
 out:
-       unlock_kernel();
+       mutex_unlock(&lp_mutex);
        return ret;
 }
 
@@ -680,7 +681,7 @@ static long lp_ioctl(struct file *file, unsigned int cmd,
        int ret;
 
        minor = iminor(file->f_path.dentry->d_inode);
-       lock_kernel();
+       mutex_lock(&lp_mutex);
        switch (cmd) {
        case LPSETTIMEOUT:
                if (copy_from_user(&par_timeout, (void __user *)arg,
@@ -694,7 +695,7 @@ static long lp_ioctl(struct file *file, unsigned int cmd,
                ret = lp_do_ioctl(minor, cmd, arg, (void __user *)arg);
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&lp_mutex);
 
        return ret;
 }
@@ -709,7 +710,7 @@ static long lp_compat_ioctl(struct file *file, unsigned int cmd,
        int ret;
 
        minor = iminor(file->f_path.dentry->d_inode);
-       lock_kernel();
+       mutex_lock(&lp_mutex);
        switch (cmd) {
        case LPSETTIMEOUT:
                tc = compat_ptr(arg);
@@ -730,7 +731,7 @@ static long lp_compat_ioctl(struct file *file, unsigned int cmd,
                ret = lp_do_ioctl(minor, cmd, arg, compat_ptr(arg));
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&lp_mutex);
 
        return ret;
 }
@@ -748,6 +749,7 @@ static const struct file_operations lp_fops = {
 #ifdef CONFIG_PARPORT_1284
        .read           = lp_read,
 #endif
+       .llseek         = noop_llseek,
 };
 
 /* --- support for console on the line printer ----------------- */