Hi Christoph, I love your patch! Perhaps something to improve: [auto build test WARNING on linuxtv-media/master] [also build test WARNING on mkp-scsi/for-next scsi/for-next linus/master v5.9-rc1 next-20200819] [cannot apply to mmotm/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Christoph-Hellwig/mm-turn-alloc_pages-into-an-inline-function/20200819-155602 base: git://linuxtv.org/media_tree.git master config: i386-randconfig-s001-20200819 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.2-183-gaa6ede3b-dirty # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> drivers/scsi/53c700.c:304:42: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned int enum dma_data_direction dir @@ got restricted gfp_t @@ >> drivers/scsi/53c700.c:304:42: sparse: expected unsigned int enum dma_data_direction dir >> drivers/scsi/53c700.c:304:42: sparse: got restricted gfp_t drivers/scsi/53c700.c:354:29: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:358:43: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:360:9: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:360:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:362:9: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:362:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:364:9: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:364:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:830:25: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:830:25: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:843:17: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:843:17: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:857:17: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:857:17: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:941:17: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:941:17: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1025:51: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1026:53: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1027:51: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1151:25: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1153:25: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1153:25: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1155:25: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1200:43: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1447:9: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1447:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1449:9: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1449:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1451:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1453:9: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1453:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1456:9: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1624:50: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1626:66: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1627:66: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1628:49: sparse: sparse: cast to restricted __le32 drivers/scsi/53c700.c:1635:67: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1639:59: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1887:43: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1890:45: sparse: sparse: restricted __le32 degrades to integer drivers/scsi/53c700.c:1892:35: sparse: sparse: restricted __le32 degrades to integer # https://github.com/0day-ci/linux/commit/b66e4b732653e92f234eb9aaceed34db54048e61 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Christoph-Hellwig/mm-turn-alloc_pages-into-an-inline-function/20200819-155602 git checkout b66e4b732653e92f234eb9aaceed34db54048e61 vim +304 drivers/scsi/53c700.c 285 286 struct Scsi_Host * 287 NCR_700_detect(struct scsi_host_template *tpnt, 288 struct NCR_700_Host_Parameters *hostdata, struct device *dev) 289 { 290 dma_addr_t pScript, pSlots; 291 __u8 *memory; 292 __u32 *script; 293 struct Scsi_Host *host; 294 static int banner = 0; 295 int j; 296 297 if(tpnt->sdev_attrs == NULL) 298 tpnt->sdev_attrs = NCR_700_dev_attrs; 299 300 memory = dma_alloc_coherent(dev, TOTAL_MEM_SIZE, &pScript, GFP_KERNEL); 301 if (!memory) { 302 hostdata->noncoherent = 1; 303 memory = dma_alloc_pages(dev, TOTAL_MEM_SIZE, &pScript, > 304 GFP_KERNEL, DMA_BIDIRECTIONAL); 305 } 306 if (!memory) { 307 printk(KERN_ERR "53c700: Failed to allocate memory for driver, detaching\n"); 308 return NULL; 309 } 310 311 script = (__u32 *)memory; 312 hostdata->msgin = memory + MSGIN_OFFSET; 313 hostdata->msgout = memory + MSGOUT_OFFSET; 314 hostdata->status = memory + STATUS_OFFSET; 315 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET); 316 hostdata->dev = dev; 317 318 pSlots = pScript + SLOTS_OFFSET; 319 320 /* Fill in the missing routines from the host template */ 321 tpnt->queuecommand = NCR_700_queuecommand; 322 tpnt->eh_abort_handler = NCR_700_abort; 323 tpnt->eh_host_reset_handler = NCR_700_host_reset; 324 tpnt->can_queue = NCR_700_COMMAND_SLOTS_PER_HOST; 325 tpnt->sg_tablesize = NCR_700_SG_SEGMENTS; 326 tpnt->cmd_per_lun = NCR_700_CMD_PER_LUN; 327 tpnt->slave_configure = NCR_700_slave_configure; 328 tpnt->slave_destroy = NCR_700_slave_destroy; 329 tpnt->slave_alloc = NCR_700_slave_alloc; 330 tpnt->change_queue_depth = NCR_700_change_queue_depth; 331 332 if(tpnt->name == NULL) 333 tpnt->name = "53c700"; 334 if(tpnt->proc_name == NULL) 335 tpnt->proc_name = "53c700"; 336 337 host = scsi_host_alloc(tpnt, 4); 338 if (!host) 339 return NULL; 340 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot) 341 * NCR_700_COMMAND_SLOTS_PER_HOST); 342 for (j = 0; j < NCR_700_COMMAND_SLOTS_PER_HOST; j++) { 343 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0] 344 - (unsigned long)&hostdata->slots[0].SG[0]); 345 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset)); 346 if(j == 0) 347 hostdata->free_list = &hostdata->slots[j]; 348 else 349 hostdata->slots[j-1].ITL_forw = &hostdata->slots[j]; 350 hostdata->slots[j].state = NCR_700_SLOT_FREE; 351 } 352 353 for (j = 0; j < ARRAY_SIZE(SCRIPT); j++) 354 script[j] = bS_to_host(SCRIPT[j]); 355 356 /* adjust all labels to be bus physical */ 357 for (j = 0; j < PATCHES; j++) 358 script[LABELPATCHES[j]] = bS_to_host(pScript + SCRIPT[LABELPATCHES[j]]); 359 /* now patch up fixed addresses. */ 360 script_patch_32(hostdata, script, MessageLocation, 361 pScript + MSGOUT_OFFSET); 362 script_patch_32(hostdata, script, StatusAddress, 363 pScript + STATUS_OFFSET); 364 script_patch_32(hostdata, script, ReceiveMsgAddress, 365 pScript + MSGIN_OFFSET); 366 367 hostdata->script = script; 368 hostdata->pScript = pScript; 369 dma_sync_single_for_device(hostdata->dev, pScript, sizeof(SCRIPT), DMA_TO_DEVICE); 370 hostdata->state = NCR_700_HOST_FREE; 371 hostdata->cmd = NULL; 372 host->max_id = 8; 373 host->max_lun = NCR_700_MAX_LUNS; 374 BUG_ON(NCR_700_transport_template == NULL); 375 host->transportt = NCR_700_transport_template; 376 host->unique_id = (unsigned long)hostdata->base; 377 hostdata->eh_complete = NULL; 378 host->hostdata[0] = (unsigned long)hostdata; 379 /* kick the chip */ 380 NCR_700_writeb(0xff, host, CTEST9_REG); 381 if (hostdata->chip710) 382 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f; 383 else 384 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f; 385 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0); 386 if (banner == 0) { 387 printk(KERN_NOTICE "53c700: Version " NCR_700_VERSION " By James.Bottomley(a)HansenPartnership.com\n"); 388 banner = 1; 389 } 390 printk(KERN_NOTICE "scsi%d: %s rev %d %s\n", host->host_no, 391 hostdata->chip710 ? "53c710" : 392 (hostdata->fast ? "53c700-66" : "53c700"), 393 hostdata->rev, hostdata->differential ? 394 "(Differential)" : ""); 395 /* reset the chip */ 396 NCR_700_chip_reset(host); 397 398 if (scsi_add_host(host, dev)) { 399 dev_printk(KERN_ERR, dev, "53c700: scsi_add_host failed\n"); 400 scsi_host_put(host); 401 return NULL; 402 } 403 404 spi_signalling(host) = hostdata->differential ? SPI_SIGNAL_HVD : 405 SPI_SIGNAL_SE; 406 407 return host; 408 } 409 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org