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