Hi Dexuan, I love your patch! Perhaps something to improve: [auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/Dexuan-Cui/net-mana-Add-a-driver-for-Microsoft-Azure-Network-Adapter-MANA/20210407-072552 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git cc0626c2aaed8e475efdd85fa374b497a7192e35 config: i386-randconfig-m021-20210406 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=1 build): # https://github.com/0day-ci/linux/commit/f086d8bc693c2686de24a81398e49496ab3747a9 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Dexuan-Cui/net-mana-Add-a-driver-for-Microsoft-Azure-Network-Adapter-MANA/20210407-072552 git checkout f086d8bc693c2686de24a81398e49496ab3747a9 # save the attached .config to linux build tree make W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): drivers/pci/controller/pci-hyperv.c: In function 'hv_irq_unmask': drivers/pci/controller/pci-hyperv.c:1220:2: error: implicit declaration of function 'hv_set_msi_entry_from_desc' [-Werror=implicit-function-declaration] 1220 | hv_set_msi_entry_from_desc(¶ms->int_entry.msi_entry, msi_desc); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pci/controller/pci-hyperv.c:1252:13: error: implicit declaration of function 'cpumask_to_vpset'; did you mean 'cpumask_subset'? [-Werror=implicit-function-declaration] 1252 | nr_bank = cpumask_to_vpset(¶ms->int_target.vp_set, tmp); | ^~~~~~~~~~~~~~~~ | cpumask_subset drivers/pci/controller/pci-hyperv.c:1269:14: error: implicit declaration of function 'hv_cpu_number_to_vp_number' [-Werror=implicit-function-declaration] 1269 | (1ULL << hv_cpu_number_to_vp_number(cpu)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pci/controller/pci-hyperv.c: In function 'prepopulate_bars': >> drivers/pci/controller/pci-hyperv.c:1756:26: warning: right shift count >= width of type [-Wshift-count-overflow] 1756 | 4, (u32)(high_base >> 32)); | ^~ drivers/pci/controller/pci-hyperv.c: In function 'hv_pci_onchannelcallback': >> drivers/pci/controller/pci-hyperv.c:2438:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 2438 | comp_packet = (struct pci_packet *)req_id; | ^ In file included from include/linux/device.h:15, from include/linux/pci.h:37, from drivers/pci/controller/pci-hyperv.c:42: drivers/pci/controller/pci-hyperv.c: In function 'hv_pci_allocate_bridge_windows': >> drivers/pci/controller/pci-hyperv.c:2675:5: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 3 has type 'resource_size_t' {aka 'unsigned int'} [-Wformat=] 2675 | "Need %#llx of low MMIO space. Consider reconfiguring the VM.\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/dev_printk.h:19:22: note: in definition of macro 'dev_fmt' 19 | #define dev_fmt(fmt) fmt | ^~~ drivers/pci/controller/pci-hyperv.c:2674:4: note: in expansion of macro 'dev_err' 2674 | dev_err(&hbus->hdev->device, | ^~~~~~~ drivers/pci/controller/pci-hyperv.c:2675:15: note: format string is defined here 2675 | "Need %#llx of low MMIO space. Consider reconfiguring the VM.\n", | ~~~~^ | | | long long unsigned int | %#x >> drivers/pci/controller/pci-hyperv.c:2690:8: warning: unsigned conversion from 'long long int' to 'resource_size_t' {aka 'unsigned int'} changes value from '4294967296' to '0' [-Woverflow] 2690 | 0x100000000, -1, | ^~~~~~~~~~~ In file included from include/linux/device.h:15, from include/linux/pci.h:37, from drivers/pci/controller/pci-hyperv.c:42: drivers/pci/controller/pci-hyperv.c:2695:5: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 3 has type 'resource_size_t' {aka 'unsigned int'} [-Wformat=] 2695 | "Need %#llx of high MMIO space. Consider reconfiguring the VM.\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/dev_printk.h:19:22: note: in definition of macro 'dev_fmt' 19 | #define dev_fmt(fmt) fmt | ^~~ drivers/pci/controller/pci-hyperv.c:2694:4: note: in expansion of macro 'dev_err' 2694 | dev_err(&hbus->hdev->device, | ^~~~~~~ drivers/pci/controller/pci-hyperv.c:2695:15: note: format string is defined here 2695 | "Need %#llx of high MMIO space. Consider reconfiguring the VM.\n", | ~~~~^ | | | long long unsigned int | %#x cc1: some warnings being treated as errors -- drivers/net/ethernet/microsoft/mana/gdma_main.c: In function 'gdma_r64': drivers/net/ethernet/microsoft/mana/gdma_main.c:18:9: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration] 18 | return readq(g->bar0_va + offset); | ^~~~~ | readl drivers/net/ethernet/microsoft/mana/gdma_main.c: In function 'gdma_ring_doorbell': drivers/net/ethernet/microsoft/mana/gdma_main.c:259:2: error: implicit declaration of function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-declaration] 259 | writeq(e.as_uint64, addr); | ^~~~~~ | writel drivers/net/ethernet/microsoft/mana/gdma_main.c: In function 'gdma_write_sgl': >> drivers/net/ethernet/microsoft/mana/gdma_main.c:1090:14: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 1090 | address = (u8 *)wqe_req->sgl[i].address; | ^ cc1: some warnings being treated as errors -- drivers/net/ethernet/microsoft/mana/hw_channel.c: In function 'hwc_post_rx_wqe': >> drivers/net/ethernet/microsoft/mana/hw_channel.c:88:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 88 | sge->address = (u64)req->buf_sge_addr; | ^ drivers/net/ethernet/microsoft/mana/hw_channel.c: In function 'hwc_post_tx_wqe': drivers/net/ethernet/microsoft/mana/hw_channel.c:542:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 542 | sge->address = (u64)req->buf_sge_addr; | ^ Kconfig warnings: (for reference only) WARNING: unmet direct dependencies detected for PCI_HYPERV Depends on PCI && X86_64 && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN && SYSFS Selected by - MICROSOFT_MANA && NETDEVICES && ETHERNET && NET_VENDOR_MICROSOFT && PCI_MSI vim +1756 drivers/pci/controller/pci-hyperv.c 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1671 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1672 /** 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1673 * prepopulate_bars() - Fill in BARs with defaults 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1674 * @hbus: Root PCI bus, as understood by this driver 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1675 * 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1676 * The core PCI driver code seems much, much happier if the BARs 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1677 * for a device have values upon first scan. So fill them in. 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1678 * The algorithm below works down from large sizes to small, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1679 * attempting to pack the assignments optimally. The assumption, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1680 * enforced in other parts of the code, is that the beginning of 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1681 * the memory-mapped I/O space will be aligned on the largest 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1682 * BAR size. 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1683 */ 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1684 static void prepopulate_bars(struct hv_pcibus_device *hbus) 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1685 { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1686 resource_size_t high_size = 0; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1687 resource_size_t low_size = 0; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1688 resource_size_t high_base = 0; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1689 resource_size_t low_base = 0; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1690 resource_size_t bar_size; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1691 struct hv_pci_dev *hpdev; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1692 unsigned long flags; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1693 u64 bar_val; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1694 u32 command; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1695 bool high; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1696 int i; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1697 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1698 if (hbus->low_mmio_space) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1699 low_size = 1ULL << (63 - __builtin_clzll(hbus->low_mmio_space)); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1700 low_base = hbus->low_mmio_res->start; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1701 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1702 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1703 if (hbus->high_mmio_space) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1704 high_size = 1ULL << 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1705 (63 - __builtin_clzll(hbus->high_mmio_space)); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1706 high_base = hbus->high_mmio_res->start; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1707 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1708 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1709 spin_lock_irqsave(&hbus->device_list_lock, flags); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1710 ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1711 /* ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1712 * Clear the memory enable bit, in case it's already set. This occurs ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1713 * in the suspend path of hibernation, where the device is suspended, ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1714 * resumed and suspended again: see hibernation_snapshot() and ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1715 * hibernation_platform_enter(). ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1716 * c77bfb54174308 drivers/pci/controller/pci-hyperv.c Bjorn Helgaas 2021-01-26 1717 * If the memory enable bit is already set, Hyper-V silently ignores ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1718 * the below BAR updates, and the related PCI device driver can not ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1719 * work, because reading from the device register(s) always returns ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1720 * 0xFFFFFFFF. ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1721 */ ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1722 list_for_each_entry(hpdev, &hbus->children, list_entry) { ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1723 _hv_pcifront_read_config(hpdev, PCI_COMMAND, 2, &command); ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1724 command &= ~PCI_COMMAND_MEMORY; ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1725 _hv_pcifront_write_config(hpdev, PCI_COMMAND, 2, command); ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1726 } ac82fc83270884 drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-11-24 1727 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1728 /* Pick addresses for the BARs. */ 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1729 do { 5b8db8f66e08fa drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 1730 list_for_each_entry(hpdev, &hbus->children, list_entry) { c9c13ba428ef90 drivers/pci/controller/pci-hyperv.c Denis Efremov 2019-09-28 1731 for (i = 0; i < PCI_STD_NUM_BARS; i++) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1732 bar_val = hpdev->probed_bar[i]; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1733 if (bar_val == 0) 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1734 continue; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1735 high = bar_val & PCI_BASE_ADDRESS_MEM_TYPE_64; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1736 if (high) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1737 bar_val |= 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1738 ((u64)hpdev->probed_bar[i + 1] 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1739 << 32); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1740 } else { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1741 bar_val |= 0xffffffffULL << 32; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1742 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1743 bar_size = get_bar_size(bar_val); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1744 if (high) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1745 if (high_size != bar_size) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1746 i++; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1747 continue; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1748 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1749 _hv_pcifront_write_config(hpdev, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1750 PCI_BASE_ADDRESS_0 + (4 * i), 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1751 4, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1752 (u32)(high_base & 0xffffff00)); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1753 i++; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1754 _hv_pcifront_write_config(hpdev, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1755 PCI_BASE_ADDRESS_0 + (4 * i), 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 @1756 4, (u32)(high_base >> 32)); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1757 high_base += bar_size; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1758 } else { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1759 if (low_size != bar_size) 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1760 continue; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1761 _hv_pcifront_write_config(hpdev, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1762 PCI_BASE_ADDRESS_0 + (4 * i), 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1763 4, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1764 (u32)(low_base & 0xffffff00)); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1765 low_base += bar_size; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1766 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1767 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1768 if (high_size <= 1 && low_size <= 1) { 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1769 /* Set the memory enable bit. */ 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1770 _hv_pcifront_read_config(hpdev, PCI_COMMAND, 2, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1771 &command); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1772 command |= PCI_COMMAND_MEMORY; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1773 _hv_pcifront_write_config(hpdev, PCI_COMMAND, 2, 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1774 command); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1775 break; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1776 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1777 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1778 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1779 high_size >>= 1; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1780 low_size >>= 1; 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1781 } while (high_size || low_size); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1782 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1783 spin_unlock_irqrestore(&hbus->device_list_lock, flags); 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1784 } 4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 1785 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org