Re: [PATCH v8 14/15] platform/x86: wmi: create userspace interface for drivers

From: kbuild test robot
Date: Mon Oct 16 2017 - 23:59:32 EST


Hi Mario,

[auto build test WARNING on platform-drivers-x86/for-next]
[also build test WARNING on next-20171016]
[cannot apply to v4.14-rc5]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Mario-Limonciello/Introduce-support-for-Dell-SMBIOS-over-WMI/20171017-103109
base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
config: i386-randconfig-x002-201742 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All warnings (new ones prefixed by >>):

In file included from include/linux/ioport.h:12:0,
from include/linux/acpi.h:25,
from drivers/platform/x86/wmi.c:36:
drivers/platform/x86/wmi.c: In function 'match_ioctl':
drivers/platform/x86/wmi.c:861:14: error: 'struct wmi_driver' has no member named 'compat_ioctl'; did you mean 'unlocked_ioctl'?
if (wdriver->compat_ioctl)
^
include/linux/compiler.h:156:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
>> drivers/platform/x86/wmi.c:861:3: note: in expansion of macro 'if'
if (wdriver->compat_ioctl)
^~
drivers/platform/x86/wmi.c:861:14: error: 'struct wmi_driver' has no member named 'compat_ioctl'; did you mean 'unlocked_ioctl'?
if (wdriver->compat_ioctl)
^
include/linux/compiler.h:156:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
>> drivers/platform/x86/wmi.c:861:3: note: in expansion of macro 'if'
if (wdriver->compat_ioctl)
^~
drivers/platform/x86/wmi.c:861:14: error: 'struct wmi_driver' has no member named 'compat_ioctl'; did you mean 'unlocked_ioctl'?
if (wdriver->compat_ioctl)
^
include/linux/compiler.h:167:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~
>> drivers/platform/x86/wmi.c:861:3: note: in expansion of macro 'if'
if (wdriver->compat_ioctl)
^~
drivers/platform/x86/wmi.c:862:17: error: 'struct wmi_driver' has no member named 'compat_ioctl'; did you mean 'unlocked_ioctl'?
ret = wdriver->compat_ioctl(&wblock->dev, cmd, arg);
^~
At top level:
drivers/platform/x86/wmi.c:877:13: warning: 'wmi_compat_ioctl' defined but not used [-Wunused-function]
static long wmi_compat_ioctl(struct file *filp, unsigned int cmd,
^~~~~~~~~~~~~~~~

vim +/if +861 drivers/platform/x86/wmi.c

802
803 static long match_ioctl(struct file *filp, unsigned int cmd, unsigned long arg,
804 int compat)
805 {
806 struct wmi_ioctl_buffer __user *input =
807 (struct wmi_ioctl_buffer __user *) arg;
808 struct wmi_driver *wdriver = NULL;
809 struct wmi_block *wblock = NULL;
810 struct wmi_block *next = NULL;
811 const char *driver_name;
812 u64 size;
813 int ret;
814
815 if (_IOC_TYPE(cmd) != WMI_IOC)
816 return -ENOTTY;
817
818 driver_name = filp->f_path.dentry->d_iname;
819
820 list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
821 wdriver = container_of(wblock->dev.dev.driver,
822 struct wmi_driver, driver);
823 if (!wdriver)
824 continue;
825 if (strcmp(driver_name, wdriver->driver.name) == 0)
826 break;
827 }
828
829 if (!wdriver)
830 return -ENODEV;
831
832 /* make sure we're not calling a higher instance than exists*/
833 if (_IOC_NR(cmd) >= wblock->gblock.instance_count)
834 return -EINVAL;
835
836 /* check that required buffer size was declared by driver */
837 if (!wblock->req_buf_size) {
838 dev_err(&wblock->dev.dev, "Required buffer size not set\n");
839 return -EINVAL;
840 }
841 if (get_user(size, &input->length)) {
842 dev_dbg(&wblock->dev.dev, "Read length from user failed\n");
843 return -EFAULT;
844 }
845 /* if it's too small, abort */
846 if (size < wblock->req_buf_size) {
847 dev_err(&wblock->dev.dev,
848 "Buffer %lld too small, need at least %lld\n",
849 size, wblock->req_buf_size);
850 return -EINVAL;
851 }
852 /* if it's too big, warn, driver will only use what is needed */
853 if (size > wblock->req_buf_size)
854 dev_warn(&wblock->dev.dev,
855 "Buffer %lld is bigger than required %lld\n",
856 size, wblock->req_buf_size);
857
858 if (!try_module_get(wdriver->driver.owner))
859 return -EBUSY;
860 if (compat) {
> 861 if (wdriver->compat_ioctl)
862 ret = wdriver->compat_ioctl(&wblock->dev, cmd, arg);
863 else
864 ret = -ENODEV;
865 } else
866 ret = wdriver->unlocked_ioctl(&wblock->dev, cmd, arg);
867 module_put(wdriver->driver.owner);
868
869 return ret;
870 }
871 static long wmi_unlocked_ioctl(struct file *filp, unsigned int cmd,
872 unsigned long arg)
873 {
874 return match_ioctl(filp, cmd, arg, 0);
875 }
876

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip