mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 16:07:39 +00:00
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:
parent
0391c828ce
commit
44c389a00f
2 changed files with 16 additions and 14 deletions
|
@ -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
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue