drivers/block/umem.c:287:16: sparse: expected unsigned int value

From: kernel test robot
Date: Sat Jun 06 2020 - 14:56:24 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 9fa88c5d3f5eae3e68ef20d226c3f13e21490668
commit: 05933aac7b11911955de307a329dc2a7a14b7bd0 ia64: remove now unused machvec indirections
date: 10 months ago
config: ia64-randconfig-s031-20200607 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-247-gcadbd124-dirty
git checkout 05933aac7b11911955de307a329dc2a7a14b7bd0
# save the attached .config to linux build tree
make W=1 C=1 ARCH=ia64 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)

./arch/ia64/include/generated/uapi/asm/unistd_64.h:348:39: sparse: sparse: no newline at end of file
drivers/block/umem.c:267:32: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le64 [usertype] sem_control_bits @@ got restricted __le32 [usertype] control_bits @@
drivers/block/umem.c:267:32: sparse: expected restricted __le64 [usertype] sem_control_bits
drivers/block/umem.c:267:32: sparse: got restricted __le32 [usertype] control_bits
drivers/block/umem.c:287:16: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@
>> drivers/block/umem.c:287:16: sparse: expected unsigned int [usertype] value
drivers/block/umem.c:287:16: sparse: got restricted __le32 [usertype]
drivers/block/umem.c:291:16: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@
drivers/block/umem.c:291:16: sparse: expected unsigned int [usertype] value
drivers/block/umem.c:291:16: sparse: got restricted __le32 [usertype]
drivers/block/umem.c:295:16: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@
drivers/block/umem.c:295:16: sparse: expected unsigned int [usertype] value
drivers/block/umem.c:295:16: sparse: got restricted __le32 [usertype]
drivers/block/umem.c:398:32: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le64 [usertype] sem_control_bits @@ got restricted __le32 [usertype] control_bits @@
drivers/block/umem.c:398:32: sparse: expected restricted __le64 [usertype] sem_control_bits
drivers/block/umem.c:398:32: sparse: got restricted __le32 [usertype] control_bits
drivers/block/umem.c:429:31: sparse: sparse: cast to restricted __le32
drivers/block/umem.c:429:31: sparse: sparse: cast from restricted __le64
drivers/block/umem.c:457:33: sparse: sparse: cast to restricted __le32
drivers/block/umem.c:457:33: sparse: sparse: cast from restricted __le64
drivers/block/umem.c:461:28: sparse: sparse: cast to restricted __le32
drivers/block/umem.c:461:28: sparse: sparse: cast from restricted __le64
drivers/block/umem.c:550:22: sparse: sparse: cast to restricted __le32
drivers/block/umem.c:559:24: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@ got restricted __le32 [usertype] @@
drivers/block/umem.c:559:24: sparse: expected unsigned int [usertype] value
drivers/block/umem.c:559:24: sparse: got restricted __le32 [usertype]
drivers/block/umem.c:573:29: sparse: sparse: cast to restricted __le32
drivers/block/umem.c:575:29: sparse: sparse: cast to restricted __le32
drivers/block/umem.c:577:29: 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: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: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: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: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

vim +287 drivers/block/umem.c

^1da177e4c3f41 Linus Torvalds 2005-04-16 228
^1da177e4c3f41 Linus Torvalds 2005-04-16 229 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 230 * Theory of request handling
^1da177e4c3f41 Linus Torvalds 2005-04-16 231 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 232 * Each bio is assigned to one mm_dma_desc - which may not be enough FIXME
^1da177e4c3f41 Linus Torvalds 2005-04-16 233 * We have two pages of mm_dma_desc, holding about 64 descriptors
^1da177e4c3f41 Linus Torvalds 2005-04-16 234 * each. These are allocated at init time.
^1da177e4c3f41 Linus Torvalds 2005-04-16 235 * One page is "Ready" and is either full, or can have request added.
^1da177e4c3f41 Linus Torvalds 2005-04-16 236 * The other page might be "Active", which DMA is happening on it.
^1da177e4c3f41 Linus Torvalds 2005-04-16 237 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 238 * Whenever IO on the active page completes, the Ready page is activated
^1da177e4c3f41 Linus Torvalds 2005-04-16 239 * and the ex-Active page is clean out and made Ready.
7eaceaccab5f40 Jens Axboe 2011-03-10 240 * Otherwise the Ready page is only activated when it becomes full.
^1da177e4c3f41 Linus Torvalds 2005-04-16 241 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 242 * If a request arrives while both pages a full, it is queued, and b_rdev is
^1da177e4c3f41 Linus Torvalds 2005-04-16 243 * overloaded to record whether it was a read or a write.
^1da177e4c3f41 Linus Torvalds 2005-04-16 244 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 245 * The interrupt handler only polls the device to clear the interrupt.
^1da177e4c3f41 Linus Torvalds 2005-04-16 246 * The processing of the result is done in a tasklet.
^1da177e4c3f41 Linus Torvalds 2005-04-16 247 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 248
^1da177e4c3f41 Linus Torvalds 2005-04-16 249 static void mm_start_io(struct cardinfo *card)
^1da177e4c3f41 Linus Torvalds 2005-04-16 250 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 251 /* we have the lock, we know there is
^1da177e4c3f41 Linus Torvalds 2005-04-16 252 * no IO active, and we know that card->Active
^1da177e4c3f41 Linus Torvalds 2005-04-16 253 * is set
^1da177e4c3f41 Linus Torvalds 2005-04-16 254 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 255 struct mm_dma_desc *desc;
^1da177e4c3f41 Linus Torvalds 2005-04-16 256 struct mm_page *page;
^1da177e4c3f41 Linus Torvalds 2005-04-16 257 int offset;
^1da177e4c3f41 Linus Torvalds 2005-04-16 258
^1da177e4c3f41 Linus Torvalds 2005-04-16 259 /* make the last descriptor end the chain */
^1da177e4c3f41 Linus Torvalds 2005-04-16 260 page = &card->mm_pages[card->Active];
458cf5e9b666c2 Randy Dunlap 2007-12-17 261 pr_debug("start_io: %d %d->%d\n",
458cf5e9b666c2 Randy Dunlap 2007-12-17 262 card->Active, page->headcnt, page->cnt - 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 263 desc = &page->desc[page->cnt-1];
^1da177e4c3f41 Linus Torvalds 2005-04-16 264
^1da177e4c3f41 Linus Torvalds 2005-04-16 265 desc->control_bits |= cpu_to_le32(DMASCR_CHAIN_COMP_EN);
^1da177e4c3f41 Linus Torvalds 2005-04-16 266 desc->control_bits &= ~cpu_to_le32(DMASCR_CHAIN_EN);
^1da177e4c3f41 Linus Torvalds 2005-04-16 267 desc->sem_control_bits = desc->control_bits;
^1da177e4c3f41 Linus Torvalds 2005-04-16 268
^1da177e4c3f41 Linus Torvalds 2005-04-16 269
^1da177e4c3f41 Linus Torvalds 2005-04-16 270 if (debug & DEBUG_LED_ON_TRANSFER)
^1da177e4c3f41 Linus Torvalds 2005-04-16 271 set_led(card, LED_REMOVE, LED_ON);
^1da177e4c3f41 Linus Torvalds 2005-04-16 272
^1da177e4c3f41 Linus Torvalds 2005-04-16 273 desc = &page->desc[page->headcnt];
^1da177e4c3f41 Linus Torvalds 2005-04-16 274 writel(0, card->csr_remap + DMA_PCI_ADDR);
^1da177e4c3f41 Linus Torvalds 2005-04-16 275 writel(0, card->csr_remap + DMA_PCI_ADDR + 4);
^1da177e4c3f41 Linus Torvalds 2005-04-16 276
^1da177e4c3f41 Linus Torvalds 2005-04-16 277 writel(0, card->csr_remap + DMA_LOCAL_ADDR);
^1da177e4c3f41 Linus Torvalds 2005-04-16 278 writel(0, card->csr_remap + DMA_LOCAL_ADDR + 4);
^1da177e4c3f41 Linus Torvalds 2005-04-16 279
^1da177e4c3f41 Linus Torvalds 2005-04-16 280 writel(0, card->csr_remap + DMA_TRANSFER_SIZE);
^1da177e4c3f41 Linus Torvalds 2005-04-16 281 writel(0, card->csr_remap + DMA_TRANSFER_SIZE + 4);
^1da177e4c3f41 Linus Torvalds 2005-04-16 282
^1da177e4c3f41 Linus Torvalds 2005-04-16 283 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR);
^1da177e4c3f41 Linus Torvalds 2005-04-16 284 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR + 4);
^1da177e4c3f41 Linus Torvalds 2005-04-16 285
^1da177e4c3f41 Linus Torvalds 2005-04-16 286 offset = ((char *)desc) - ((char *)page->desc);
^1da177e4c3f41 Linus Torvalds 2005-04-16 @287 writel(cpu_to_le32((page->page_dma+offset) & 0xffffffff),
^1da177e4c3f41 Linus Torvalds 2005-04-16 288 card->csr_remap + DMA_DESCRIPTOR_ADDR);
^1da177e4c3f41 Linus Torvalds 2005-04-16 289 /* Force the value to u64 before shifting otherwise >> 32 is undefined C
^1da177e4c3f41 Linus Torvalds 2005-04-16 290 * and on some ports will do nothing ! */
^1da177e4c3f41 Linus Torvalds 2005-04-16 291 writel(cpu_to_le32(((u64)page->page_dma)>>32),
^1da177e4c3f41 Linus Torvalds 2005-04-16 292 card->csr_remap + DMA_DESCRIPTOR_ADDR + 4);
^1da177e4c3f41 Linus Torvalds 2005-04-16 293
^1da177e4c3f41 Linus Torvalds 2005-04-16 294 /* Go, go, go */
^1da177e4c3f41 Linus Torvalds 2005-04-16 295 writel(cpu_to_le32(DMASCR_GO | DMASCR_CHAIN_EN | pci_cmds),
^1da177e4c3f41 Linus Torvalds 2005-04-16 296 card->csr_remap + DMA_STATUS_CTRL);
^1da177e4c3f41 Linus Torvalds 2005-04-16 297 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 298

:::::: The code at line 287 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>

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

Attachment: .config.gz
Description: application/gzip