Hi Stefan, I love your patch! Yet something to improve: [auto build test ERROR on fuse/for-next] [also build test ERROR on v4.20-rc6] [cannot apply to next-20181213] [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/Vivek-Goyal/virtio-fs-shared-file-system-for-virtual-machines/20181211-103034 base: https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next config: sh-allmodconfig (attached as .config) compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=7.2.0 make.cross ARCH=sh All errors (new ones prefixed by >>): fs/fuse/virtio_fs.c: In function 'virtio_fs_setup_dax': >> fs/fuse/virtio_fs.c:465:8: error: implicit declaration of function 'pcim_enable_device'; did you mean 'pci_enable_device'? [-Werror=implicit-function-declaration] ret = pcim_enable_device(pci_dev); ^~~~~~~~~~~~~~~~~~ pci_enable_device >> fs/fuse/virtio_fs.c:470:8: error: implicit declaration of function 'pci_request_region'; did you mean 'pci_request_regions'? [-Werror=implicit-function-declaration] ret = pci_request_region(pci_dev, VIRTIO_FS_WINDOW_BAR, ^~~~~~~~~~~~~~~~~~ pci_request_regions In file included from include/linux/printk.h:336:0, from include/linux/kernel.h:14, from include/linux/list.h:9, from include/linux/wait.h:7, from include/linux/wait_bit.h:8, from include/linux/fs.h:6, from fs/fuse/virtio_fs.c:7: fs/fuse/virtio_fs.c:528:22: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 6 has type 'phys_addr_t {aka unsigned int}' [-Wformat=] dev_dbg(&vdev->dev, "%s: window kaddr 0x%px phys_addr 0x%llx len %zu\n", ^ include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg' __dynamic_dev_dbg(&descriptor, dev, fmt, \ ^~~ include/linux/device.h:1463:23: note: in expansion of macro 'dev_fmt' dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) ^~~~~~~ fs/fuse/virtio_fs.c:528:2: note: in expansion of macro 'dev_dbg' dev_dbg(&vdev->dev, "%s: window kaddr 0x%px phys_addr 0x%llx len %zu\n", ^~~~~~~ At top level: fs/fuse/virtio_fs.c:604:12: warning: 'virtio_fs_restore' defined but not used [-Wunused-function] static int virtio_fs_restore(struct virtio_device *vdev) ^~~~~~~~~~~~~~~~~ fs/fuse/virtio_fs.c:599:12: warning: 'virtio_fs_freeze' defined but not used [-Wunused-function] static int virtio_fs_freeze(struct virtio_device *vdev) ^~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +465 fs/fuse/virtio_fs.c 445 446 static int virtio_fs_setup_dax(struct virtio_device *vdev, struct virtio_fs *fs) 447 { 448 struct virtio_fs_memremap_info *mi; 449 struct dev_pagemap *pgmap; 450 struct pci_dev *pci_dev; 451 phys_addr_t phys_addr; 452 size_t len; 453 int ret; 454 455 if (!IS_ENABLED(CONFIG_DAX_DRIVER)) 456 return 0; 457 458 /* HACK implement VIRTIO shared memory regions instead of 459 * directly accessing the PCI BAR from a virtio device driver. 460 */ 461 pci_dev = container_of(vdev->dev.parent, struct pci_dev, dev); 462 463 /* TODO Is this safe - the virtio_pci_* driver doesn't use managed 464 * device APIs? */ > 465 ret = pcim_enable_device(pci_dev); 466 if (ret < 0) 467 return ret; 468 469 /* TODO handle case where device doesn't expose BAR? */ > 470 ret = pci_request_region(pci_dev, VIRTIO_FS_WINDOW_BAR, 471 "virtio-fs-window"); 472 if (ret < 0) { 473 dev_err(&vdev->dev, "%s: failed to request window BAR\n", 474 __func__); 475 return ret; 476 } 477 478 phys_addr = pci_resource_start(pci_dev, VIRTIO_FS_WINDOW_BAR); 479 len = pci_resource_len(pci_dev, VIRTIO_FS_WINDOW_BAR); 480 481 mi = devm_kzalloc(&pci_dev->dev, sizeof(*mi), GFP_KERNEL); 482 if (!mi) 483 return -ENOMEM; 484 485 init_completion(&mi->completion); 486 ret = percpu_ref_init(&mi->ref, virtio_fs_percpu_release, 0, 487 GFP_KERNEL); 488 if (ret < 0) { 489 dev_err(&vdev->dev, "%s: percpu_ref_init failed (%d)\n", 490 __func__, ret); 491 return ret; 492 } 493 494 ret = devm_add_action(&pci_dev->dev, virtio_fs_percpu_exit, mi); 495 if (ret < 0) { 496 percpu_ref_exit(&mi->ref); 497 return ret; 498 } 499 500 pgmap = &mi->pgmap; 501 pgmap->altmap_valid = false; 502 pgmap->ref = &mi->ref; 503 pgmap->type = MEMORY_DEVICE_FS_DAX; 504 505 /* Ideally we would directly use the PCI BAR resource but 506 * devm_memremap_pages() wants its own copy in pgmap. So 507 * initialize a struct resource from scratch (only the start 508 * and end fields will be used). 509 */ 510 pgmap->res = (struct resource){ 511 .name = "virtio-fs dax window", 512 .start = phys_addr, 513 .end = phys_addr + len, 514 }; 515 516 fs->window_kaddr = devm_memremap_pages(&pci_dev->dev, pgmap); 517 if (IS_ERR(fs->window_kaddr)) 518 return PTR_ERR(fs->window_kaddr); 519 520 ret = devm_add_action_or_reset(&pci_dev->dev, virtio_fs_percpu_kill, 521 &mi->ref); 522 if (ret < 0) 523 return ret; 524 525 fs->window_phys_addr = phys_addr; 526 fs->window_len = len; 527 528 dev_dbg(&vdev->dev, "%s: window kaddr 0x%px phys_addr 0x%llx len %zu\n", 529 __func__, fs->window_kaddr, phys_addr, len); 530 531 fs->dax_dev = alloc_dax(fs, NULL, &virtio_fs_dax_ops); 532 if (!fs->dax_dev) 533 return -ENOMEM; 534 535 return devm_add_action_or_reset(&vdev->dev, virtio_fs_cleanup_dax, fs); 536 } 537 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation