Push the cdev lock_kernel() call into MIPS-specific drivers.
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
 #include <linux/vmalloc.h>
 #include <linux/elf.h>
 #include <linux/seq_file.h>
+#include <linux/smp_lock.h>
 #include <linux/syscalls.h>
 #include <linux/moduleloader.h>
 #include <linux/interrupt.h>
 static int file_open(struct inode *inode, struct file *filp)
 {
        int minor = iminor(inode);
+       int err;
 
-       return rtlx_open(minor, (filp->f_flags & O_NONBLOCK) ? 0 : 1);
+       lock_kernel();
+       err = rtlx_open(minor, (filp->f_flags & O_NONBLOCK) ? 0 : 1);
+       unlock_kernel();
+       return err;
 }
 
 static int file_release(struct inode *inode, struct file *filp)
 
 #include <linux/vmalloc.h>
 #include <linux/elf.h>
 #include <linux/seq_file.h>
+#include <linux/smp_lock.h>
 #include <linux/syscalls.h>
 #include <linux/moduleloader.h>
 #include <linux/interrupt.h>
        enum vpe_state state;
        struct vpe_notifications *not;
        struct vpe *v;
-       int ret;
+       int ret, err = 0;
 
+       lock_kernel();
        if (minor != iminor(inode)) {
                /* assume only 1 device at the moment. */
                printk(KERN_WARNING "VPE loader: only vpe1 is supported\n");
-               return -ENODEV;
+               err = -ENODEV;
+               goto out;
        }
 
        if ((v = get_vpe(tclimit)) == NULL) {
                printk(KERN_WARNING "VPE loader: unable to get vpe\n");
-               return -ENODEV;
+               err = -ENODEV;
+               goto out;
        }
 
        state = xchg(&v->state, VPE_STATE_INUSE);
        v->shared_ptr = NULL;
        v->__start = 0;
 
+out:
+       unlock_kernel();
        return 0;
 }
 
 
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
+#include <linux/smp_lock.h>
 #include <linux/vmalloc.h>
 #include <linux/fs.h>
 #include <linux/errno.h>
 static int sbprof_tb_open(struct inode *inode, struct file *filp)
 {
        int minor;
+       int err = 0;
 
+       lock_kernel();
        minor = iminor(inode);
-       if (minor != 0)
-               return -ENODEV;
+       if (minor != 0) {
+               err = -ENODEV;
+               goto out;
+       }
 
-       if (xchg(&sbp.open, SB_OPENING) != SB_CLOSED)
-               return -EBUSY;
+       if (xchg(&sbp.open, SB_OPENING) != SB_CLOSED) {
+               err = -EBUSY;
+               goto out;
+       }
 
        memset(&sbp, 0, sizeof(struct sbprof_tb));
        sbp.sbprof_tbbuf = vmalloc(MAX_TBSAMPLE_BYTES);
-       if (!sbp.sbprof_tbbuf)
-               return -ENOMEM;
+       if (!sbp.sbprof_tbbuf) {
+               err = -ENOMEM;
+               goto out;
+       }
        memset(sbp.sbprof_tbbuf, 0, MAX_TBSAMPLE_BYTES);
        init_waitqueue_head(&sbp.tb_sync);
        init_waitqueue_head(&sbp.tb_read);
 
        sbp.open = SB_OPEN;
 
-       return 0;
+  out:
+       unlock_kernel();
+       return err;
 }
 
 static int sbprof_tb_release(struct inode *inode, struct file *filp)