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: Alan Cox <alan@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Alan Cox 2008-05-22 22:03:27 +01:00 committed by Greg Kroah-Hartman
parent 0391c828ce
commit 44c389a00f
2 changed files with 16 additions and 14 deletions

View file

@ -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,
};

View file

@ -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
};