drivers/usb/host/ohci-sm501.c:177:20: sparse: sparse: incorrect type in argument 1 (different address spaces)

From: kernel test robot
Date: Wed Aug 05 2020 - 05:12:24 EST


Hi Luc,

First bad commit (maybe != root cause):

tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 4da9f3302615f4191814f826054846bf843e24fa
commit: 670d0a4b10704667765f7d18f7592993d02783aa sparse: use identifiers to define address spaces
date: 7 weeks ago
config: openrisc-randconfig-s031-20200805 (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-117-g8c7aee71-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 <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)

drivers/usb/host/ohci-hcd.c: note: in included file:
>> drivers/usb/host/ohci-sm501.c:177:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *addr @@ got void [noderef] __iomem *regs @@
drivers/usb/host/ohci-sm501.c:177:20: sparse: expected void *addr
>> drivers/usb/host/ohci-sm501.c:177:20: sparse: got void [noderef] __iomem *regs
drivers/usb/host/ohci-hcd.c: note: in included file (through arch/openrisc/include/asm/io.h, include/linux/io.h, include/linux/irq.h, ...):
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: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: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: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: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]

vim +177 drivers/usb/host/ohci-sm501.c

f54aab6ebcecd9 Magnus Damm 2008-01-23 87
f54aab6ebcecd9 Magnus Damm 2008-01-23 88 static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev)
f54aab6ebcecd9 Magnus Damm 2008-01-23 89 {
f54aab6ebcecd9 Magnus Damm 2008-01-23 90 const struct hc_driver *driver = &ohci_sm501_hc_driver;
f54aab6ebcecd9 Magnus Damm 2008-01-23 91 struct device *dev = &pdev->dev;
f54aab6ebcecd9 Magnus Damm 2008-01-23 92 struct resource *res, *mem;
f54aab6ebcecd9 Magnus Damm 2008-01-23 93 int retval, irq;
af3d305ca71fea Harvey Harrison 2008-04-30 94 struct usb_hcd *hcd = NULL;
f54aab6ebcecd9 Magnus Damm 2008-01-23 95
f54aab6ebcecd9 Magnus Damm 2008-01-23 96 irq = retval = platform_get_irq(pdev, 0);
f54aab6ebcecd9 Magnus Damm 2008-01-23 97 if (retval < 0)
f54aab6ebcecd9 Magnus Damm 2008-01-23 98 goto err0;
f54aab6ebcecd9 Magnus Damm 2008-01-23 99
f54aab6ebcecd9 Magnus Damm 2008-01-23 100 mem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
f54aab6ebcecd9 Magnus Damm 2008-01-23 101 if (mem == NULL) {
f54aab6ebcecd9 Magnus Damm 2008-01-23 102 dev_err(dev, "no resource definition for memory\n");
f54aab6ebcecd9 Magnus Damm 2008-01-23 103 retval = -ENOENT;
f54aab6ebcecd9 Magnus Damm 2008-01-23 104 goto err0;
f54aab6ebcecd9 Magnus Damm 2008-01-23 105 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 106
28f65c11f2ffb3 Joe Perches 2011-06-09 107 if (!request_mem_region(mem->start, resource_size(mem), pdev->name)) {
f54aab6ebcecd9 Magnus Damm 2008-01-23 108 dev_err(dev, "request_mem_region failed\n");
f54aab6ebcecd9 Magnus Damm 2008-01-23 109 retval = -EBUSY;
f54aab6ebcecd9 Magnus Damm 2008-01-23 110 goto err0;
f54aab6ebcecd9 Magnus Damm 2008-01-23 111 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 112
f54aab6ebcecd9 Magnus Damm 2008-01-23 113 /* allocate, reserve and remap resources for registers */
f54aab6ebcecd9 Magnus Damm 2008-01-23 114 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
f54aab6ebcecd9 Magnus Damm 2008-01-23 115 if (res == NULL) {
f54aab6ebcecd9 Magnus Damm 2008-01-23 116 dev_err(dev, "no resource definition for registers\n");
f54aab6ebcecd9 Magnus Damm 2008-01-23 117 retval = -ENOENT;
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 118 goto err1;
f54aab6ebcecd9 Magnus Damm 2008-01-23 119 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 120
7071a3ce0ca058 Kay Sievers 2008-05-02 121 hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
f54aab6ebcecd9 Magnus Damm 2008-01-23 122 if (!hcd) {
f54aab6ebcecd9 Magnus Damm 2008-01-23 123 retval = -ENOMEM;
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 124 goto err1;
f54aab6ebcecd9 Magnus Damm 2008-01-23 125 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 126
f54aab6ebcecd9 Magnus Damm 2008-01-23 127 hcd->rsrc_start = res->start;
28f65c11f2ffb3 Joe Perches 2011-06-09 128 hcd->rsrc_len = resource_size(res);
f54aab6ebcecd9 Magnus Damm 2008-01-23 129
f54aab6ebcecd9 Magnus Damm 2008-01-23 130 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, pdev->name)) {
f54aab6ebcecd9 Magnus Damm 2008-01-23 131 dev_err(dev, "request_mem_region failed\n");
f54aab6ebcecd9 Magnus Damm 2008-01-23 132 retval = -EBUSY;
f54aab6ebcecd9 Magnus Damm 2008-01-23 133 goto err3;
f54aab6ebcecd9 Magnus Damm 2008-01-23 134 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 135
f54aab6ebcecd9 Magnus Damm 2008-01-23 136 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
f54aab6ebcecd9 Magnus Damm 2008-01-23 137 if (hcd->regs == NULL) {
f54aab6ebcecd9 Magnus Damm 2008-01-23 138 dev_err(dev, "cannot remap registers\n");
f54aab6ebcecd9 Magnus Damm 2008-01-23 139 retval = -ENXIO;
f54aab6ebcecd9 Magnus Damm 2008-01-23 140 goto err4;
f54aab6ebcecd9 Magnus Damm 2008-01-23 141 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 142
f54aab6ebcecd9 Magnus Damm 2008-01-23 143 ohci_hcd_init(hcd_to_ohci(hcd));
f54aab6ebcecd9 Magnus Damm 2008-01-23 144
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 145 /* The sm501 chip is equipped with local memory that may be used
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 146 * by on-chip devices such as the video controller and the usb host.
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 147 * This driver uses genalloc so that usb allocations with
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 148 * gen_pool_dma_alloc() allocate from this local memory. The dma_handle
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 149 * returned by gen_pool_dma_alloc() will be an offset starting from 0
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 150 * for the first local memory byte.
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 151 *
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 152 * So as long as data is allocated using gen_pool_dma_alloc() all is
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 153 * fine. This is however not always the case - buffers may be allocated
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 154 * using kmalloc() - so the usb core needs to be told that it must copy
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 155 * data into our local memory if the buffers happen to be placed in
2d7a3dc3e24f43 Laurentiu Tudor 2019-05-29 156 * regular memory. A non-null hcd->localmem_pool initialized by the
2d7a3dc3e24f43 Laurentiu Tudor 2019-05-29 157 * the call to usb_hcd_setup_local_mem() below does just that.
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 158 */
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 159
b919e077cccfbb Wei Yongjun 2020-05-06 160 retval = usb_hcd_setup_local_mem(hcd, mem->start,
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 161 mem->start - mem->parent->start,
b919e077cccfbb Wei Yongjun 2020-05-06 162 resource_size(mem));
b919e077cccfbb Wei Yongjun 2020-05-06 163 if (retval < 0)
7d9e6f5aebe8c0 Laurentiu Tudor 2019-05-29 164 goto err5;
b5dd18d8747010 Yong Zhang 2011-09-07 165 retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
f54aab6ebcecd9 Magnus Damm 2008-01-23 166 if (retval)
637ed74ff9e86d Dan Carpenter 2010-09-10 167 goto err5;
3c9740a117d40a Peter Chen 2013-11-05 168 device_wakeup_enable(hcd->self.controller);
f54aab6ebcecd9 Magnus Damm 2008-01-23 169
f54aab6ebcecd9 Magnus Damm 2008-01-23 170 /* enable power and unmask interrupts */
f54aab6ebcecd9 Magnus Damm 2008-01-23 171
f54aab6ebcecd9 Magnus Damm 2008-01-23 172 sm501_unit_power(dev->parent, SM501_GATE_USB_HOST, 1);
f54aab6ebcecd9 Magnus Damm 2008-01-23 173 sm501_modify_reg(dev->parent, SM501_IRQ_MASK, 1 << 6, 0);
f54aab6ebcecd9 Magnus Damm 2008-01-23 174
f54aab6ebcecd9 Magnus Damm 2008-01-23 175 return 0;
637ed74ff9e86d Dan Carpenter 2010-09-10 176 err5:
637ed74ff9e86d Dan Carpenter 2010-09-10 @177 iounmap(hcd->regs);
f54aab6ebcecd9 Magnus Damm 2008-01-23 178 err4:
f54aab6ebcecd9 Magnus Damm 2008-01-23 179 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
f54aab6ebcecd9 Magnus Damm 2008-01-23 180 err3:
f54aab6ebcecd9 Magnus Damm 2008-01-23 181 usb_put_hcd(hcd);
f54aab6ebcecd9 Magnus Damm 2008-01-23 182 err1:
28f65c11f2ffb3 Joe Perches 2011-06-09 183 release_mem_region(mem->start, resource_size(mem));
f54aab6ebcecd9 Magnus Damm 2008-01-23 184 err0:
f54aab6ebcecd9 Magnus Damm 2008-01-23 185 return retval;
f54aab6ebcecd9 Magnus Damm 2008-01-23 186 }
f54aab6ebcecd9 Magnus Damm 2008-01-23 187

:::::: The code at line 177 was first introduced by commit
:::::: 637ed74ff9e86d8c2979e430309a1fd28c921de9 USB: ohci-sm501: add iounmap on error path

:::::: TO: Dan Carpenter <error27@xxxxxxxxx>
:::::: CC: Greg Kroah-Hartman <gregkh@xxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip