Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
[pandora-kernel.git] / drivers / usb / gadget / inode.c
index de8a838..d1d72d9 100644 (file)
@@ -33,7 +33,6 @@
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/poll.h>
-#include <linux/smp_lock.h>
 
 #include <linux/device.h>
 #include <linux/moduleparam.h>
@@ -1299,11 +1298,9 @@ static long dev_ioctl (struct file *fd, unsigned code, unsigned long value)
        struct usb_gadget       *gadget = dev->gadget;
        long ret = -ENOTTY;
 
-       if (gadget->ops->ioctl) {
-               lock_kernel();
+       if (gadget->ops->ioctl)
                ret = gadget->ops->ioctl (gadget, code, value);
-               unlock_kernel();
-       }
+
        return ret;
 }
 
@@ -1777,7 +1774,6 @@ static struct usb_gadget_driver gadgetfs_driver = {
        .speed          = USB_SPEED_FULL,
 #endif
        .function       = (char *) driver_desc,
-       .bind           = gadgetfs_bind,
        .unbind         = gadgetfs_unbind,
        .setup          = gadgetfs_setup,
        .disconnect     = gadgetfs_disconnect,
@@ -1800,7 +1796,6 @@ static int gadgetfs_probe (struct usb_gadget *gadget)
 
 static struct usb_gadget_driver probe_driver = {
        .speed          = USB_SPEED_HIGH,
-       .bind           = gadgetfs_probe,
        .unbind         = gadgetfs_nop,
        .setup          = (void *)gadgetfs_nop,
        .disconnect     = gadgetfs_nop,
@@ -1867,13 +1862,9 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
        buf += 4;
        length -= 4;
 
-       kbuf = kmalloc (length, GFP_KERNEL);
-       if (!kbuf)
-               return -ENOMEM;
-       if (copy_from_user (kbuf, buf, length)) {
-               kfree (kbuf);
-               return -EFAULT;
-       }
+       kbuf = memdup_user(buf, length);
+       if (IS_ERR(kbuf))
+               return PTR_ERR(kbuf);
 
        spin_lock_irq (&dev->lock);
        value = -EINVAL;
@@ -1914,7 +1905,7 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
 
        /* triggers gadgetfs_bind(); then we can enumerate. */
        spin_unlock_irq (&dev->lock);
-       value = usb_gadget_register_driver (&gadgetfs_driver);
+       value = usb_gadget_probe_driver(&gadgetfs_driver, gadgetfs_bind);
        if (value != 0) {
                kfree (dev->buf);
                dev->buf = NULL;
@@ -2053,7 +2044,7 @@ gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
                return -ESRCH;
 
        /* fake probe to determine $CHIP */
-       (void) usb_gadget_register_driver (&probe_driver);
+       (void) usb_gadget_probe_driver(&probe_driver, gadgetfs_probe);
        if (!CHIP)
                return -ENODEV;