gadget: Push BKL down into drivers
PATCH 1/1 gadget: Push BKL down into drivers
This keeps the gadget ioctl method wrapped but pushes the BKL down into the gadget code so we can use unlocked_ioctl().
Signed-off-by Alan Cox <[email protected]>
drivers/usb/gadget/inode.c +13 -10
@@ -32,6 +32,7 @@#include <asm/uaccess.h> #include <linux/slab.h> #include <linux/poll.h> +#include <linux/smp_lock.h> #include <linux/device.h> #include <linux/moduleparam.h>
@@ -483,8 +484,7 @@ ep_release (struct inode *inode, struct file *fd)return 0 ; } -static int ep_ioctl (struct inode *inode,struct file *fd, -unsigned code,unsigned long value) +static long ep_ioctl (struct file *fd,unsigned code,unsigned long value) {struct ep_data *data = fd->private_data;int status;
@@ -740,7 +740,7 @@ static const struct file_operations ep_io_operations = { .read = ep_read, .write = ep_write, - .ioctl = ep_ioctl, + .unlocked_ioctl = ep_ioctl, .release = ep_release, .aio_read = ep_aio_read,
@@ -1294,15 +1294,18 @@ out:return mask; } -static int dev_ioctl (struct inode *inode,struct file *fd, -unsigned code,unsigned long value) +static long dev_ioctl (struct file *fd,unsigned code,unsigned long value) {struct dev_data *dev = fd->private_data;struct usb_gadget *gadget = dev->gadget; +long ret = -ENOTTY ; -if (gadget->ops->ioctl) -return gadget->ops->ioctl (gadget, code, value); -return -ENOTTY ; +if (gadget->ops->ioctl) { +lock_kernel (); + ret = gadget->ops->ioctl (gadget, code, value); +unlock_kernel (); + } +return ret; }/* used after device configuration */
@@ -1314,7 +1317,7 @@ static const struct file_operations ep0_io_operations = { .write = ep0_write, .fasync = ep0_fasync, .poll = ep0_poll, - .ioctl = dev_ioctl, + .unlocked_ioctl = dev_ioctl, .release = dev_release, };
@@ -1964,7 +1967,7 @@ static const struct file_operations dev_init_operations = { .open = dev_open, .write = dev_config, .fasync = ep0_fasync, - .ioctl = dev_ioctl, + .unlocked_ioctl = dev_ioctl, .release = dev_release, };
drivers/usb/gadget/printer.c +3 -4
@@ -827,9 +827,8 @@ printer_poll(struct file *fd, poll_table *wait)return status; } -static int -printer_ioctl (struct inode *inode,struct file *fd,unsigned int code, -unsigned long arg) +static long +printer_ioctl (struct file *fd,unsigned int code,unsigned long arg) {struct printer_dev *dev = fd->private_data;unsigned long flags;
@@ -868,7 +867,7 @@ static struct file_operations printer_io_operations = { .write = printer_write, .fsync = printer_fsync, .poll = printer_poll, - .ioctl = printer_ioctl, + .unlocked_ioctl = printer_ioctl, .release = printer_close };