提交 1832f2d8 编写于 作者: A Arnd Bergmann

compat_ioctl: move more drivers to compat_ptr_ioctl

The .ioctl and .compat_ioctl file operations have the same prototype so
they can both point to the same function, which works great almost all
the time when all the commands are compatible.

One exception is the s390 architecture, where a compat pointer is only
31 bit wide, and converting it into a 64-bit pointer requires calling
compat_ptr(). Most drivers here will never run in s390, but since we now
have a generic helper for it, it's easy enough to use it consistently.

I double-checked all these drivers to ensure that all ioctl arguments
are used as pointers or are ignored, but are not interpreted as integer
values.
Acked-by: NJason Gunthorpe <jgg@mellanox.com>
Acked-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: NMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: NDavid Sterba <dsterba@suse.com>
Acked-by: NDarren Hart (VMware) <dvhart@infradead.org>
Acked-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
Acked-by: NBjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: NDan Williams <dan.j.williams@intel.com>
Signed-off-by: NArnd Bergmann <arnd@arndb.de>
上级 407e9ef7
...@@ -6063,7 +6063,7 @@ const struct file_operations binder_fops = { ...@@ -6063,7 +6063,7 @@ const struct file_operations binder_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.poll = binder_poll, .poll = binder_poll,
.unlocked_ioctl = binder_ioctl, .unlocked_ioctl = binder_ioctl,
.compat_ioctl = binder_ioctl, .compat_ioctl = compat_ptr_ioctl,
.mmap = binder_mmap, .mmap = binder_mmap,
.open = binder_open, .open = binder_open,
.flush = binder_flush, .flush = binder_flush,
......
...@@ -68,7 +68,7 @@ static long adf_ctl_ioctl(struct file *fp, unsigned int cmd, unsigned long arg); ...@@ -68,7 +68,7 @@ static long adf_ctl_ioctl(struct file *fp, unsigned int cmd, unsigned long arg);
static const struct file_operations adf_ctl_ops = { static const struct file_operations adf_ctl_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.unlocked_ioctl = adf_ctl_ioctl, .unlocked_ioctl = adf_ctl_ioctl,
.compat_ioctl = adf_ctl_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
struct adf_ctl_drv_info { struct adf_ctl_drv_info {
......
...@@ -415,9 +415,7 @@ static const struct file_operations dma_buf_fops = { ...@@ -415,9 +415,7 @@ static const struct file_operations dma_buf_fops = {
.llseek = dma_buf_llseek, .llseek = dma_buf_llseek,
.poll = dma_buf_poll, .poll = dma_buf_poll,
.unlocked_ioctl = dma_buf_ioctl, .unlocked_ioctl = dma_buf_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = dma_buf_ioctl,
#endif
.show_fdinfo = dma_buf_show_fdinfo, .show_fdinfo = dma_buf_show_fdinfo,
}; };
......
...@@ -408,5 +408,5 @@ const struct file_operations sw_sync_debugfs_fops = { ...@@ -408,5 +408,5 @@ const struct file_operations sw_sync_debugfs_fops = {
.open = sw_sync_debugfs_open, .open = sw_sync_debugfs_open,
.release = sw_sync_debugfs_release, .release = sw_sync_debugfs_release,
.unlocked_ioctl = sw_sync_ioctl, .unlocked_ioctl = sw_sync_ioctl,
.compat_ioctl = sw_sync_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
...@@ -480,5 +480,5 @@ static const struct file_operations sync_file_fops = { ...@@ -480,5 +480,5 @@ static const struct file_operations sync_file_fops = {
.release = sync_file_release, .release = sync_file_release,
.poll = sync_file_poll, .poll = sync_file_poll,
.unlocked_ioctl = sync_file_ioctl, .unlocked_ioctl = sync_file_ioctl,
.compat_ioctl = sync_file_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
...@@ -49,7 +49,7 @@ static const char kfd_dev_name[] = "kfd"; ...@@ -49,7 +49,7 @@ static const char kfd_dev_name[] = "kfd";
static const struct file_operations kfd_fops = { static const struct file_operations kfd_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.unlocked_ioctl = kfd_ioctl, .unlocked_ioctl = kfd_ioctl,
.compat_ioctl = kfd_ioctl, .compat_ioctl = compat_ptr_ioctl,
.open = kfd_open, .open = kfd_open,
.mmap = kfd_mmap, .mmap = kfd_mmap,
}; };
......
...@@ -468,9 +468,7 @@ static const struct file_operations hidraw_ops = { ...@@ -468,9 +468,7 @@ static const struct file_operations hidraw_ops = {
.release = hidraw_release, .release = hidraw_release,
.unlocked_ioctl = hidraw_ioctl, .unlocked_ioctl = hidraw_ioctl,
.fasync = hidraw_fasync, .fasync = hidraw_fasync,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = hidraw_ioctl,
#endif
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -1610,7 +1610,7 @@ static const struct file_operations iio_buffer_fileops = { ...@@ -1610,7 +1610,7 @@ static const struct file_operations iio_buffer_fileops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.llseek = noop_llseek, .llseek = noop_llseek,
.unlocked_ioctl = iio_ioctl, .unlocked_ioctl = iio_ioctl,
.compat_ioctl = iio_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static int iio_check_unique_scan_index(struct iio_dev *indio_dev) static int iio_check_unique_scan_index(struct iio_dev *indio_dev)
......
...@@ -1139,7 +1139,7 @@ static const struct file_operations uverbs_fops = { ...@@ -1139,7 +1139,7 @@ static const struct file_operations uverbs_fops = {
.release = ib_uverbs_close, .release = ib_uverbs_close,
.llseek = no_llseek, .llseek = no_llseek,
.unlocked_ioctl = ib_uverbs_ioctl, .unlocked_ioctl = ib_uverbs_ioctl,
.compat_ioctl = ib_uverbs_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static const struct file_operations uverbs_mmap_fops = { static const struct file_operations uverbs_mmap_fops = {
...@@ -1150,7 +1150,7 @@ static const struct file_operations uverbs_mmap_fops = { ...@@ -1150,7 +1150,7 @@ static const struct file_operations uverbs_mmap_fops = {
.release = ib_uverbs_close, .release = ib_uverbs_close,
.llseek = no_llseek, .llseek = no_llseek,
.unlocked_ioctl = ib_uverbs_ioctl, .unlocked_ioctl = ib_uverbs_ioctl,
.compat_ioctl = ib_uverbs_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static int ib_uverbs_get_nl_info(struct ib_device *ibdev, void *client_data, static int ib_uverbs_get_nl_info(struct ib_device *ibdev, void *client_data,
......
...@@ -720,9 +720,7 @@ static const struct file_operations lirc_fops = { ...@@ -720,9 +720,7 @@ static const struct file_operations lirc_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.write = ir_lirc_transmit_ir, .write = ir_lirc_transmit_ir,
.unlocked_ioctl = ir_lirc_ioctl, .unlocked_ioctl = ir_lirc_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = ir_lirc_ioctl,
#endif
.read = ir_lirc_read, .read = ir_lirc_read,
.poll = ir_lirc_poll, .poll = ir_lirc_poll,
.open = ir_lirc_open, .open = ir_lirc_open,
......
...@@ -961,7 +961,7 @@ static const struct file_operations vmuser_fops = { ...@@ -961,7 +961,7 @@ static const struct file_operations vmuser_fops = {
.release = vmci_host_close, .release = vmci_host_close,
.poll = vmci_host_poll, .poll = vmci_host_poll,
.unlocked_ioctl = vmci_host_unlocked_ioctl, .unlocked_ioctl = vmci_host_unlocked_ioctl,
.compat_ioctl = vmci_host_unlocked_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static struct miscdevice vmci_host_miscdev = { static struct miscdevice vmci_host_miscdev = {
......
...@@ -1227,7 +1227,7 @@ static const struct file_operations nvdimm_bus_fops = { ...@@ -1227,7 +1227,7 @@ static const struct file_operations nvdimm_bus_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = nd_open, .open = nd_open,
.unlocked_ioctl = bus_ioctl, .unlocked_ioctl = bus_ioctl,
.compat_ioctl = bus_ioctl, .compat_ioctl = compat_ptr_ioctl,
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
...@@ -1235,7 +1235,7 @@ static const struct file_operations nvdimm_fops = { ...@@ -1235,7 +1235,7 @@ static const struct file_operations nvdimm_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = nd_open, .open = nd_open,
.unlocked_ioctl = dimm_ioctl, .unlocked_ioctl = dimm_ioctl,
.compat_ioctl = dimm_ioctl, .compat_ioctl = compat_ptr_ioctl,
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -2947,7 +2947,7 @@ static const struct file_operations nvme_dev_fops = { ...@@ -2947,7 +2947,7 @@ static const struct file_operations nvme_dev_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = nvme_dev_open, .open = nvme_dev_open,
.unlocked_ioctl = nvme_dev_ioctl, .unlocked_ioctl = nvme_dev_ioctl,
.compat_ioctl = nvme_dev_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static ssize_t nvme_sysfs_reset(struct device *dev, static ssize_t nvme_sysfs_reset(struct device *dev,
......
...@@ -1025,7 +1025,7 @@ static const struct file_operations switchtec_fops = { ...@@ -1025,7 +1025,7 @@ static const struct file_operations switchtec_fops = {
.read = switchtec_dev_read, .read = switchtec_dev_read,
.poll = switchtec_dev_poll, .poll = switchtec_dev_poll,
.unlocked_ioctl = switchtec_dev_ioctl, .unlocked_ioctl = switchtec_dev_ioctl,
.compat_ioctl = switchtec_dev_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static void link_event_work(struct work_struct *work) static void link_event_work(struct work_struct *work)
......
...@@ -911,7 +911,7 @@ static const struct file_operations wmi_fops = { ...@@ -911,7 +911,7 @@ static const struct file_operations wmi_fops = {
.read = wmi_char_read, .read = wmi_char_read,
.open = wmi_char_open, .open = wmi_char_open,
.unlocked_ioctl = wmi_ioctl, .unlocked_ioctl = wmi_ioctl,
.compat_ioctl = wmi_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static int wmi_dev_probe(struct device *dev) static int wmi_dev_probe(struct device *dev)
......
...@@ -290,7 +290,7 @@ static const struct file_operations rpmsg_eptdev_fops = { ...@@ -290,7 +290,7 @@ static const struct file_operations rpmsg_eptdev_fops = {
.write_iter = rpmsg_eptdev_write_iter, .write_iter = rpmsg_eptdev_write_iter,
.poll = rpmsg_eptdev_poll, .poll = rpmsg_eptdev_poll,
.unlocked_ioctl = rpmsg_eptdev_ioctl, .unlocked_ioctl = rpmsg_eptdev_ioctl,
.compat_ioctl = rpmsg_eptdev_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static ssize_t name_show(struct device *dev, struct device_attribute *attr, static ssize_t name_show(struct device *dev, struct device_attribute *attr,
...@@ -451,7 +451,7 @@ static const struct file_operations rpmsg_ctrldev_fops = { ...@@ -451,7 +451,7 @@ static const struct file_operations rpmsg_ctrldev_fops = {
.open = rpmsg_ctrldev_open, .open = rpmsg_ctrldev_open,
.release = rpmsg_ctrldev_release, .release = rpmsg_ctrldev_release,
.unlocked_ioctl = rpmsg_ctrldev_ioctl, .unlocked_ioctl = rpmsg_ctrldev_ioctl,
.compat_ioctl = rpmsg_ctrldev_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static void rpmsg_ctrldev_release_device(struct device *dev) static void rpmsg_ctrldev_release_device(struct device *dev)
......
...@@ -156,7 +156,7 @@ static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ...@@ -156,7 +156,7 @@ static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
static const struct file_operations d7s_fops = { static const struct file_operations d7s_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.unlocked_ioctl = d7s_ioctl, .unlocked_ioctl = d7s_ioctl,
.compat_ioctl = d7s_ioctl, .compat_ioctl = compat_ptr_ioctl,
.open = d7s_open, .open = d7s_open,
.release = d7s_release, .release = d7s_release,
.llseek = noop_llseek, .llseek = noop_llseek,
......
...@@ -715,9 +715,7 @@ static const struct file_operations envctrl_fops = { ...@@ -715,9 +715,7 @@ static const struct file_operations envctrl_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.read = envctrl_read, .read = envctrl_read,
.unlocked_ioctl = envctrl_ioctl, .unlocked_ioctl = envctrl_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = envctrl_ioctl,
#endif
.open = envctrl_open, .open = envctrl_open,
.release = envctrl_release, .release = envctrl_release,
.llseek = noop_llseek, .llseek = noop_llseek,
......
...@@ -1049,9 +1049,7 @@ static int tw_chrdev_open(struct inode *inode, struct file *file) ...@@ -1049,9 +1049,7 @@ static int tw_chrdev_open(struct inode *inode, struct file *file)
static const struct file_operations tw_fops = { static const struct file_operations tw_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.unlocked_ioctl = tw_chrdev_ioctl, .unlocked_ioctl = tw_chrdev_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = tw_chrdev_ioctl,
#endif
.open = tw_chrdev_open, .open = tw_chrdev_open,
.release = NULL, .release = NULL,
.llseek = noop_llseek, .llseek = noop_llseek,
......
...@@ -3593,7 +3593,7 @@ static const struct file_operations cxlflash_chr_fops = { ...@@ -3593,7 +3593,7 @@ static const struct file_operations cxlflash_chr_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = cxlflash_chr_open, .open = cxlflash_chr_open,
.unlocked_ioctl = cxlflash_chr_ioctl, .unlocked_ioctl = cxlflash_chr_ioctl,
.compat_ioctl = cxlflash_chr_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
/** /**
......
...@@ -613,7 +613,7 @@ static int __init esas2r_init(void) ...@@ -613,7 +613,7 @@ static int __init esas2r_init(void)
/* Handle ioctl calls to "/proc/scsi/esas2r/ATTOnode" */ /* Handle ioctl calls to "/proc/scsi/esas2r/ATTOnode" */
static const struct file_operations esas2r_proc_fops = { static const struct file_operations esas2r_proc_fops = {
.compat_ioctl = esas2r_proc_ioctl, .compat_ioctl = compat_ptr_ioctl,
.unlocked_ioctl = esas2r_proc_ioctl, .unlocked_ioctl = esas2r_proc_ioctl,
}; };
......
...@@ -3973,9 +3973,7 @@ static const struct file_operations pmcraid_fops = { ...@@ -3973,9 +3973,7 @@ static const struct file_operations pmcraid_fops = {
.open = pmcraid_chr_open, .open = pmcraid_chr_open,
.fasync = pmcraid_chr_fasync, .fasync = pmcraid_chr_fasync,
.unlocked_ioctl = pmcraid_chr_ioctl, .unlocked_ioctl = pmcraid_chr_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = pmcraid_chr_ioctl,
#endif
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -533,9 +533,7 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) ...@@ -533,9 +533,7 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
static const struct file_operations ion_fops = { static const struct file_operations ion_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.unlocked_ioctl = ion_ioctl, .unlocked_ioctl = ion_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = ion_ioctl,
#endif
}; };
static int debug_shrink_set(void *data, u64 val) static int debug_shrink_set(void *data, u64 val)
......
...@@ -494,7 +494,7 @@ static const struct file_operations vme_user_fops = { ...@@ -494,7 +494,7 @@ static const struct file_operations vme_user_fops = {
.write = vme_user_write, .write = vme_user_write,
.llseek = vme_user_llseek, .llseek = vme_user_llseek,
.unlocked_ioctl = vme_user_unlocked_ioctl, .unlocked_ioctl = vme_user_unlocked_ioctl,
.compat_ioctl = vme_user_unlocked_ioctl, .compat_ioctl = compat_ptr_ioctl,
.mmap = vme_user_mmap, .mmap = vme_user_mmap,
}; };
......
...@@ -675,7 +675,7 @@ static const struct file_operations tee_fops = { ...@@ -675,7 +675,7 @@ static const struct file_operations tee_fops = {
.open = tee_open, .open = tee_open,
.release = tee_release, .release = tee_release,
.unlocked_ioctl = tee_ioctl, .unlocked_ioctl = tee_ioctl,
.compat_ioctl = tee_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static void tee_release_device(struct device *dev) static void tee_release_device(struct device *dev)
......
...@@ -734,7 +734,7 @@ static const struct file_operations wdm_fops = { ...@@ -734,7 +734,7 @@ static const struct file_operations wdm_fops = {
.release = wdm_release, .release = wdm_release,
.poll = wdm_poll, .poll = wdm_poll,
.unlocked_ioctl = wdm_ioctl, .unlocked_ioctl = wdm_ioctl,
.compat_ioctl = wdm_ioctl, .compat_ioctl = compat_ptr_ioctl,
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -2217,9 +2217,7 @@ static const struct file_operations fops = { ...@@ -2217,9 +2217,7 @@ static const struct file_operations fops = {
.release = usbtmc_release, .release = usbtmc_release,
.flush = usbtmc_flush, .flush = usbtmc_flush,
.unlocked_ioctl = usbtmc_ioctl, .unlocked_ioctl = usbtmc_ioctl,
#ifdef CONFIG_COMPAT .compat_ioctl = compat_ptr_ioctl,
.compat_ioctl = usbtmc_ioctl,
#endif
.fasync = usbtmc_fasync, .fasync = usbtmc_fasync,
.poll = usbtmc_poll, .poll = usbtmc_poll,
.llseek = default_llseek, .llseek = default_llseek,
......
...@@ -706,7 +706,7 @@ static const struct file_operations fsl_hv_fops = { ...@@ -706,7 +706,7 @@ static const struct file_operations fsl_hv_fops = {
.poll = fsl_hv_poll, .poll = fsl_hv_poll,
.read = fsl_hv_read, .read = fsl_hv_read,
.unlocked_ioctl = fsl_hv_ioctl, .unlocked_ioctl = fsl_hv_ioctl,
.compat_ioctl = fsl_hv_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
static struct miscdevice fsl_hv_misc_dev = { static struct miscdevice fsl_hv_misc_dev = {
......
...@@ -2297,7 +2297,7 @@ static const struct super_operations btrfs_super_ops = { ...@@ -2297,7 +2297,7 @@ static const struct super_operations btrfs_super_ops = {
static const struct file_operations btrfs_ctl_fops = { static const struct file_operations btrfs_ctl_fops = {
.open = btrfs_control_open, .open = btrfs_control_open,
.unlocked_ioctl = btrfs_control_ioctl, .unlocked_ioctl = btrfs_control_ioctl,
.compat_ioctl = btrfs_control_ioctl, .compat_ioctl = compat_ptr_ioctl,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -2260,7 +2260,7 @@ const struct file_operations fuse_dev_operations = { ...@@ -2260,7 +2260,7 @@ const struct file_operations fuse_dev_operations = {
.release = fuse_dev_release, .release = fuse_dev_release,
.fasync = fuse_dev_fasync, .fasync = fuse_dev_fasync,
.unlocked_ioctl = fuse_dev_ioctl, .unlocked_ioctl = fuse_dev_ioctl,
.compat_ioctl = fuse_dev_ioctl, .compat_ioctl = compat_ptr_ioctl,
}; };
EXPORT_SYMBOL_GPL(fuse_dev_operations); EXPORT_SYMBOL_GPL(fuse_dev_operations);
......
...@@ -523,7 +523,7 @@ static const struct file_operations fanotify_fops = { ...@@ -523,7 +523,7 @@ static const struct file_operations fanotify_fops = {
.fasync = NULL, .fasync = NULL,
.release = fanotify_release, .release = fanotify_release,
.unlocked_ioctl = fanotify_ioctl, .unlocked_ioctl = fanotify_ioctl,
.compat_ioctl = fanotify_ioctl, .compat_ioctl = compat_ptr_ioctl,
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -1923,7 +1923,7 @@ static const struct file_operations userfaultfd_fops = { ...@@ -1923,7 +1923,7 @@ static const struct file_operations userfaultfd_fops = {
.poll = userfaultfd_poll, .poll = userfaultfd_poll,
.read = userfaultfd_read, .read = userfaultfd_read,
.unlocked_ioctl = userfaultfd_ioctl, .unlocked_ioctl = userfaultfd_ioctl,
.compat_ioctl = userfaultfd_ioctl, .compat_ioctl = compat_ptr_ioctl,
.llseek = noop_llseek, .llseek = noop_llseek,
}; };
......
...@@ -1311,7 +1311,7 @@ static const struct file_operations rfkill_fops = { ...@@ -1311,7 +1311,7 @@ static const struct file_operations rfkill_fops = {
.release = rfkill_fop_release, .release = rfkill_fop_release,
#ifdef CONFIG_RFKILL_INPUT #ifdef CONFIG_RFKILL_INPUT
.unlocked_ioctl = rfkill_fop_ioctl, .unlocked_ioctl = rfkill_fop_ioctl,
.compat_ioctl = rfkill_fop_ioctl, .compat_ioctl = compat_ptr_ioctl,
#endif #endif
.llseek = no_llseek, .llseek = no_llseek,
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册