default:
                if (intf->dev.driver)
                        driver = to_usb_driver(intf->dev.driver);
-               if (driver == NULL || driver->ioctl == NULL) {
+               if (driver == NULL || driver->unlocked_ioctl == NULL) {
                        retval = -ENOTTY;
                } else {
-                       /* keep API that guarantees BKL */
-                       lock_kernel();
-                       retval = driver->ioctl(intf, ctl->ioctl_code, buf);
-                       unlock_kernel();
+                       retval = driver->unlocked_ioctl(intf, ctl->ioctl_code, buf);
                        if (retval == -ENOIOCTLCMD)
                                retval = -ENOTTY;
                }
 
        return -ENODEV;
 }
 
+/* No BKL needed */
 static int
 hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
 {
        .reset_resume = hub_reset_resume,
        .pre_reset =    hub_pre_reset,
        .post_reset =   hub_post_reset,
-       .ioctl =        hub_ioctl,
+       .unlocked_ioctl = hub_ioctl,
        .id_table =     hub_id_table,
        .supports_autosuspend = 1,
 };
 
  * off just killing the userspace task and waiting for it to exit.
  */
 
+/* No BKL needed */
 static int
 usbtest_ioctl (struct usb_interface *intf, unsigned int code, void *buf)
 {
        .name =         "usbtest",
        .id_table =     id_table,
        .probe =        usbtest_probe,
-       .ioctl =        usbtest_ioctl,
+       .unlocked_ioctl = usbtest_ioctl,
        .disconnect =   usbtest_disconnect,
        .suspend =      usbtest_suspend,
        .resume =       usbtest_resume,
 
 
        void (*disconnect) (struct usb_interface *intf);
 
-       int (*ioctl) (struct usb_interface *intf, unsigned int code,
+       int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code,
                        void *buf);
 
        int (*suspend) (struct usb_interface *intf, pm_message_t message);