Commit 44c389a0 authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman

USB: 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: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 0391c828
......@@ -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 @@ ep0_poll (struct file *fd, poll_table *wait)
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,
};
......
......@@ -828,9 +828,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;
......@@ -869,7 +868,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
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment