tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 0bddd227f3dc55975e2b8dfa7fc6f959b062a2c7 commit: 670d0a4b10704667765f7d18f7592993d02783aa sparse: use identifiers to define address spaces date: 3 weeks ago config: openrisc-randconfig-s031-20200710 (attached as .config) compiler: or1k-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.2-37-gc9676a3b-dirty git checkout 670d0a4b10704667765f7d18f7592993d02783aa # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=openrisc
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> sparse warnings: (new ones prefixed by >>) >> drivers/usb/class/usbtmc.c:498:22: sparse: sparse: incorrect type in >> initializer (different address spaces) @@ expected unsigned char >> *__pu_addr @@ got unsigned char [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:498:22: sparse: expected unsigned char *__pu_addr >> drivers/usb/class/usbtmc.c:498:22: sparse: got unsigned char [noderef] >> [usertype] __user * drivers/usb/class/usbtmc.c:556:14: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned char *__pu_addr @@ got unsigned char [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:556:14: sparse: expected unsigned char *__pu_addr drivers/usb/class/usbtmc.c:556:14: sparse: got unsigned char [noderef] [usertype] __user * drivers/usb/class/usbtmc.c:584:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user *arg @@ drivers/usb/class/usbtmc.c:584:13: sparse: expected unsigned int const *__gu_addr drivers/usb/class/usbtmc.c:584:13: sparse: got unsigned int [noderef] [usertype] __user *arg >> drivers/usb/class/usbtmc.c:1033:13: sparse: sparse: incorrect type in >> initializer (different address spaces) @@ expected unsigned int >> *__pu_addr @@ got unsigned int [noderef] __user * @@ drivers/usb/class/usbtmc.c:1033:13: sparse: expected unsigned int *__pu_addr >> drivers/usb/class/usbtmc.c:1033:13: sparse: got unsigned int [noderef] >> __user * drivers/usb/class/usbtmc.c:1244:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int *__pu_addr @@ got unsigned int [noderef] __user * @@ drivers/usb/class/usbtmc.c:1244:13: sparse: expected unsigned int *__pu_addr drivers/usb/class/usbtmc.c:1244:13: sparse: got unsigned int [noderef] __user * >> drivers/usb/class/usbtmc.c:1265:13: sparse: sparse: incorrect type in >> initializer (different address spaces) @@ expected unsigned int >> *__pu_addr @@ got unsigned int [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:1265:13: sparse: expected unsigned int *__pu_addr drivers/usb/class/usbtmc.c:1265:13: sparse: got unsigned int [noderef] [usertype] __user * drivers/usb/class/usbtmc.c:1952:16: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int *__pu_addr @@ got unsigned int [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:1952:16: sparse: expected unsigned int *__pu_addr drivers/usb/class/usbtmc.c:1952:16: sparse: got unsigned int [noderef] [usertype] __user * drivers/usb/class/usbtmc.c:1963:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:1963:13: sparse: expected unsigned int const *__gu_addr drivers/usb/class/usbtmc.c:1963:13: sparse: got unsigned int [noderef] [usertype] __user * drivers/usb/class/usbtmc.c:2099:26: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int *__pu_addr @@ got unsigned int [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:2099:26: sparse: expected unsigned int *__pu_addr drivers/usb/class/usbtmc.c:2099:26: sparse: got unsigned int [noderef] [usertype] __user * >> drivers/usb/class/usbtmc.c:2104:26: sparse: sparse: incorrect type in >> initializer (different address spaces) @@ expected unsigned char >> *__pu_addr @@ got unsigned char [noderef] __user * @@ drivers/usb/class/usbtmc.c:2104:26: sparse: expected unsigned char *__pu_addr drivers/usb/class/usbtmc.c:2104:26: sparse: got unsigned char [noderef] __user * drivers/usb/class/usbtmc.c:2138:26: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned char *__pu_addr @@ got unsigned char [noderef] [usertype] __user * @@ drivers/usb/class/usbtmc.c:2138:26: sparse: expected unsigned char *__pu_addr drivers/usb/class/usbtmc.c:2138:26: sparse: got unsigned char [noderef] [usertype] __user * drivers/usb/class/usbtmc.c:2143:26: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned char const *__gu_addr @@ got unsigned char [noderef] __user * @@ drivers/usb/class/usbtmc.c:2143:26: sparse: expected unsigned char const *__gu_addr drivers/usb/class/usbtmc.c:2143:26: sparse: got unsigned char [noderef] __user * arch/openrisc/include/asm/cmpxchg.h:101:29: sparse: sparse: shift too big (32) for type int include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *to @@ got void [noderef] __user *to @@ include/linux/uaccess.h:131:38: sparse: expected void *to include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *from @@ include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from include/linux/uaccess.h:131:42: sparse: got void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@ arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user *from include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *to @@ got void [noderef] __user *to @@ include/linux/uaccess.h:131:38: sparse: expected void *to include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *from @@ include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from include/linux/uaccess.h:131:42: sparse: got void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@ arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user *from include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *to @@ got void [noderef] __user *to @@ include/linux/uaccess.h:131:38: sparse: expected void *to include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *from @@ include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from include/linux/uaccess.h:131:42: sparse: got void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@ arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user *from -- >> drivers/hid/hid-roccat.c:393:21: sparse: sparse: incorrect type in >> initializer (different address spaces) @@ expected int *__pu_addr @@ >> got int [noderef] __user * @@ drivers/hid/hid-roccat.c:393:21: sparse: expected int *__pu_addr >> drivers/hid/hid-roccat.c:393:21: sparse: got int [noderef] __user * include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *to @@ got void [noderef] __user *to @@ include/linux/uaccess.h:131:38: sparse: expected void *to include/linux/uaccess.h:131:38: sparse: got void [noderef] __user *to include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *from @@ include/linux/uaccess.h:131:42: sparse: expected void const [noderef] __user *from include/linux/uaccess.h:131:42: sparse: got void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@ arch/openrisc/include/asm/uaccess.h:246:55: sparse: expected void const *from arch/openrisc/include/asm/uaccess.h:246:55: sparse: got void const [noderef] __user *from -- >> drivers/clk/clk-hsdk-pll.c:415:24: sparse: sparse: incorrect type in >> argument 1 (different address spaces) @@ expected void *addr @@ got >> void [noderef] __iomem *spec_regs @@ drivers/clk/clk-hsdk-pll.c:415:24: sparse: expected void *addr >> drivers/clk/clk-hsdk-pll.c:415:24: sparse: got void [noderef] __iomem >> *spec_regs >> drivers/clk/clk-hsdk-pll.c:417:24: sparse: sparse: incorrect type in >> argument 1 (different address spaces) @@ expected void *addr @@ got >> void [noderef] __iomem *regs @@ drivers/clk/clk-hsdk-pll.c:417:24: sparse: expected void *addr >> drivers/clk/clk-hsdk-pll.c:417:24: sparse: got void [noderef] __iomem >> *regs -- >> drivers/tty/serial/altera_uart.c:628:29: sparse: sparse: incorrect type in >> argument 1 (different address spaces) @@ expected void *addr @@ got >> unsigned char [noderef] __iomem *membase @@ drivers/tty/serial/altera_uart.c:628:29: sparse: expected void *addr >> drivers/tty/serial/altera_uart.c:628:29: sparse: got unsigned char >> [noderef] __iomem *membase include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] -- >> drivers/tty/serial/xilinx_uartps.c:988:21: sparse: sparse: incorrect type in >> argument 1 (different address spaces) @@ expected void *addr @@ got >> unsigned char [noderef] __iomem *membase @@ drivers/tty/serial/xilinx_uartps.c:988:21: sparse: expected void *addr >> drivers/tty/serial/xilinx_uartps.c:988:21: sparse: got unsigned char >> [noderef] __iomem *membase include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@ include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype] drivers/tty/serial/xilinx_uartps.c:553:33: sparse: sparse: context imbalance in 'cdns_uart_clk_notifier_cb' - different lock contexts for basic block include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32 vim +498 drivers/usb/class/usbtmc.c 0e59088e7ff7ae Guido Kiener 2018-09-12 477 4f3c8d6eddc272 Guido Kiener 2018-07-18 478 static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data, dbf3e7f654c0f0 Dave Penkler 2016-01-27 479 void __user *arg) dbf3e7f654c0f0 Dave Penkler 2016-01-27 480 { 4f3c8d6eddc272 Guido Kiener 2018-07-18 481 struct usbtmc_device_data *data = file_data->data; dbf3e7f654c0f0 Dave Penkler 2016-01-27 482 struct device *dev = &data->intf->dev; 4f3c8d6eddc272 Guido Kiener 2018-07-18 483 int srq_asserted = 0; dbf3e7f654c0f0 Dave Penkler 2016-01-27 484 u8 *buffer; dbf3e7f654c0f0 Dave Penkler 2016-01-27 485 u8 tag; dbf3e7f654c0f0 Dave Penkler 2016-01-27 486 __u8 stb; dbf3e7f654c0f0 Dave Penkler 2016-01-27 487 int rv; dbf3e7f654c0f0 Dave Penkler 2016-01-27 488 dbf3e7f654c0f0 Dave Penkler 2016-01-27 489 dev_dbg(dev, "Enter ioctl_read_stb iin_ep_present: %d\n", dbf3e7f654c0f0 Dave Penkler 2016-01-27 490 data->iin_ep_present); dbf3e7f654c0f0 Dave Penkler 2016-01-27 491 4f3c8d6eddc272 Guido Kiener 2018-07-18 492 spin_lock_irq(&data->dev_lock); 4f3c8d6eddc272 Guido Kiener 2018-07-18 493 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted); 4f3c8d6eddc272 Guido Kiener 2018-07-18 494 if (srq_asserted) { 4f3c8d6eddc272 Guido Kiener 2018-07-18 495 /* a STB with SRQ is already received */ 4f3c8d6eddc272 Guido Kiener 2018-07-18 496 stb = file_data->srq_byte; 4f3c8d6eddc272 Guido Kiener 2018-07-18 497 spin_unlock_irq(&data->dev_lock); 4f3c8d6eddc272 Guido Kiener 2018-07-18 @498 rv = put_user(stb, (__u8 __user *)arg); 4f3c8d6eddc272 Guido Kiener 2018-07-18 499 dev_dbg(dev, "stb:0x%02x with srq received %d\n", 4f3c8d6eddc272 Guido Kiener 2018-07-18 500 (unsigned int)stb, rv); 4f3c8d6eddc272 Guido Kiener 2018-07-18 501 return rv; 4f3c8d6eddc272 Guido Kiener 2018-07-18 502 } 4f3c8d6eddc272 Guido Kiener 2018-07-18 503 spin_unlock_irq(&data->dev_lock); 4f3c8d6eddc272 Guido Kiener 2018-07-18 504 dbf3e7f654c0f0 Dave Penkler 2016-01-27 505 buffer = kmalloc(8, GFP_KERNEL); dbf3e7f654c0f0 Dave Penkler 2016-01-27 506 if (!buffer) dbf3e7f654c0f0 Dave Penkler 2016-01-27 507 return -ENOMEM; dbf3e7f654c0f0 Dave Penkler 2016-01-27 508 dbf3e7f654c0f0 Dave Penkler 2016-01-27 509 atomic_set(&data->iin_data_valid, 0); dbf3e7f654c0f0 Dave Penkler 2016-01-27 510 dbf3e7f654c0f0 Dave Penkler 2016-01-27 511 rv = usb_control_msg(data->usb_dev, dbf3e7f654c0f0 Dave Penkler 2016-01-27 512 usb_rcvctrlpipe(data->usb_dev, 0), dbf3e7f654c0f0 Dave Penkler 2016-01-27 513 USBTMC488_REQUEST_READ_STATUS_BYTE, dbf3e7f654c0f0 Dave Penkler 2016-01-27 514 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, dbf3e7f654c0f0 Dave Penkler 2016-01-27 515 data->iin_bTag, dbf3e7f654c0f0 Dave Penkler 2016-01-27 516 data->ifnum, 63c97bbad5ae5e Guido Kiener 2018-09-12 517 buffer, 0x03, USB_CTRL_GET_TIMEOUT); dbf3e7f654c0f0 Dave Penkler 2016-01-27 518 if (rv < 0) { dbf3e7f654c0f0 Dave Penkler 2016-01-27 519 dev_err(dev, "stb usb_control_msg returned %d\n", rv); dbf3e7f654c0f0 Dave Penkler 2016-01-27 520 goto exit; dbf3e7f654c0f0 Dave Penkler 2016-01-27 521 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 522 dbf3e7f654c0f0 Dave Penkler 2016-01-27 523 if (buffer[0] != USBTMC_STATUS_SUCCESS) { dbf3e7f654c0f0 Dave Penkler 2016-01-27 524 dev_err(dev, "control status returned %x\n", buffer[0]); dbf3e7f654c0f0 Dave Penkler 2016-01-27 525 rv = -EIO; dbf3e7f654c0f0 Dave Penkler 2016-01-27 526 goto exit; dbf3e7f654c0f0 Dave Penkler 2016-01-27 527 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 528 dbf3e7f654c0f0 Dave Penkler 2016-01-27 529 if (data->iin_ep_present) { dbf3e7f654c0f0 Dave Penkler 2016-01-27 530 rv = wait_event_interruptible_timeout( dbf3e7f654c0f0 Dave Penkler 2016-01-27 531 data->waitq, dbf3e7f654c0f0 Dave Penkler 2016-01-27 532 atomic_read(&data->iin_data_valid) != 0, 048c6d88a02147 Guido Kiener 2018-07-18 533 file_data->timeout); dbf3e7f654c0f0 Dave Penkler 2016-01-27 534 if (rv < 0) { dbf3e7f654c0f0 Dave Penkler 2016-01-27 535 dev_dbg(dev, "wait interrupted %d\n", rv); dbf3e7f654c0f0 Dave Penkler 2016-01-27 536 goto exit; dbf3e7f654c0f0 Dave Penkler 2016-01-27 537 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 538 dbf3e7f654c0f0 Dave Penkler 2016-01-27 539 if (rv == 0) { dbf3e7f654c0f0 Dave Penkler 2016-01-27 540 dev_dbg(dev, "wait timed out\n"); 19e6c57e96169c Guido Kiener 2018-07-18 541 rv = -ETIMEDOUT; dbf3e7f654c0f0 Dave Penkler 2016-01-27 542 goto exit; dbf3e7f654c0f0 Dave Penkler 2016-01-27 543 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 544 dbf3e7f654c0f0 Dave Penkler 2016-01-27 545 tag = data->bNotify1 & 0x7f; dbf3e7f654c0f0 Dave Penkler 2016-01-27 546 if (tag != data->iin_bTag) { dbf3e7f654c0f0 Dave Penkler 2016-01-27 547 dev_err(dev, "expected bTag %x got %x\n", dbf3e7f654c0f0 Dave Penkler 2016-01-27 548 data->iin_bTag, tag); dbf3e7f654c0f0 Dave Penkler 2016-01-27 549 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 550 dbf3e7f654c0f0 Dave Penkler 2016-01-27 551 stb = data->bNotify2; dbf3e7f654c0f0 Dave Penkler 2016-01-27 552 } else { dbf3e7f654c0f0 Dave Penkler 2016-01-27 553 stb = buffer[2]; dbf3e7f654c0f0 Dave Penkler 2016-01-27 554 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 555 4f3c8d6eddc272 Guido Kiener 2018-07-18 556 rv = put_user(stb, (__u8 __user *)arg); 4f3c8d6eddc272 Guido Kiener 2018-07-18 557 dev_dbg(dev, "stb:0x%02x received %d\n", (unsigned int)stb, rv); dbf3e7f654c0f0 Dave Penkler 2016-01-27 558 dbf3e7f654c0f0 Dave Penkler 2016-01-27 559 exit: dbf3e7f654c0f0 Dave Penkler 2016-01-27 560 /* bump interrupt bTag */ dbf3e7f654c0f0 Dave Penkler 2016-01-27 561 data->iin_bTag += 1; dbf3e7f654c0f0 Dave Penkler 2016-01-27 562 if (data->iin_bTag > 127) dbf3e7f654c0f0 Dave Penkler 2016-01-27 563 /* 1 is for SRQ see USBTMC-USB488 subclass spec section 4.3.1 */ dbf3e7f654c0f0 Dave Penkler 2016-01-27 564 data->iin_bTag = 2; dbf3e7f654c0f0 Dave Penkler 2016-01-27 565 dbf3e7f654c0f0 Dave Penkler 2016-01-27 566 kfree(buffer); dbf3e7f654c0f0 Dave Penkler 2016-01-27 567 return rv; dbf3e7f654c0f0 Dave Penkler 2016-01-27 568 } dbf3e7f654c0f0 Dave Penkler 2016-01-27 569 739240a9f6ac4d Guido Kiener 2018-09-12 570 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data, 739240a9f6ac4d Guido Kiener 2018-09-12 571 __u32 __user *arg) 739240a9f6ac4d Guido Kiener 2018-09-12 572 { 739240a9f6ac4d Guido Kiener 2018-09-12 573 struct usbtmc_device_data *data = file_data->data; 739240a9f6ac4d Guido Kiener 2018-09-12 574 struct device *dev = &data->intf->dev; 739240a9f6ac4d Guido Kiener 2018-09-12 575 int rv; 739240a9f6ac4d Guido Kiener 2018-09-12 576 u32 timeout; 739240a9f6ac4d Guido Kiener 2018-09-12 577 unsigned long expire; 739240a9f6ac4d Guido Kiener 2018-09-12 578 739240a9f6ac4d Guido Kiener 2018-09-12 579 if (!data->iin_ep_present) { 739240a9f6ac4d Guido Kiener 2018-09-12 580 dev_dbg(dev, "no interrupt endpoint present\n"); 739240a9f6ac4d Guido Kiener 2018-09-12 581 return -EFAULT; 739240a9f6ac4d Guido Kiener 2018-09-12 582 } 739240a9f6ac4d Guido Kiener 2018-09-12 583 739240a9f6ac4d Guido Kiener 2018-09-12 @584 if (get_user(timeout, arg)) 739240a9f6ac4d Guido Kiener 2018-09-12 585 return -EFAULT; 739240a9f6ac4d Guido Kiener 2018-09-12 586 739240a9f6ac4d Guido Kiener 2018-09-12 587 expire = msecs_to_jiffies(timeout); 739240a9f6ac4d Guido Kiener 2018-09-12 588 739240a9f6ac4d Guido Kiener 2018-09-12 589 mutex_unlock(&data->io_mutex); 739240a9f6ac4d Guido Kiener 2018-09-12 590 739240a9f6ac4d Guido Kiener 2018-09-12 591 rv = wait_event_interruptible_timeout( 739240a9f6ac4d Guido Kiener 2018-09-12 592 data->waitq, 739240a9f6ac4d Guido Kiener 2018-09-12 593 atomic_read(&file_data->srq_asserted) != 0 || 739240a9f6ac4d Guido Kiener 2018-09-12 594 atomic_read(&file_data->closing), 739240a9f6ac4d Guido Kiener 2018-09-12 595 expire); 739240a9f6ac4d Guido Kiener 2018-09-12 596 739240a9f6ac4d Guido Kiener 2018-09-12 597 mutex_lock(&data->io_mutex); 739240a9f6ac4d Guido Kiener 2018-09-12 598 739240a9f6ac4d Guido Kiener 2018-09-12 599 /* Note! disconnect or close could be called in the meantime */ 739240a9f6ac4d Guido Kiener 2018-09-12 600 if (atomic_read(&file_data->closing) || data->zombie) 739240a9f6ac4d Guido Kiener 2018-09-12 601 rv = -ENODEV; 739240a9f6ac4d Guido Kiener 2018-09-12 602 739240a9f6ac4d Guido Kiener 2018-09-12 603 if (rv < 0) { 739240a9f6ac4d Guido Kiener 2018-09-12 604 /* dev can be invalid now! */ 739240a9f6ac4d Guido Kiener 2018-09-12 605 pr_debug("%s - wait interrupted %d\n", __func__, rv); 739240a9f6ac4d Guido Kiener 2018-09-12 606 return rv; 739240a9f6ac4d Guido Kiener 2018-09-12 607 } 739240a9f6ac4d Guido Kiener 2018-09-12 608 739240a9f6ac4d Guido Kiener 2018-09-12 609 if (rv == 0) { 739240a9f6ac4d Guido Kiener 2018-09-12 610 dev_dbg(dev, "%s - wait timed out\n", __func__); 739240a9f6ac4d Guido Kiener 2018-09-12 611 return -ETIMEDOUT; 739240a9f6ac4d Guido Kiener 2018-09-12 612 } 739240a9f6ac4d Guido Kiener 2018-09-12 613 739240a9f6ac4d Guido Kiener 2018-09-12 614 dev_dbg(dev, "%s - srq asserted\n", __func__); 739240a9f6ac4d Guido Kiener 2018-09-12 615 return 0; 739240a9f6ac4d Guido Kiener 2018-09-12 616 } 739240a9f6ac4d Guido Kiener 2018-09-12 617 :::::: The code at line 498 was first introduced by commit :::::: 4f3c8d6eddc272b386464524235440a418ed2029 usb: usbtmc: Support Read Status Byte with SRQ per file :::::: TO: Guido Kiener <gu...@kiener-muenchen.de> :::::: CC: Greg Kroah-Hartman <gre...@linuxfoundation.org> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip