PCI: Fail MSI-X mappings if there's no space assigned to MSI-X BAR
Unlike MSI, which is configured via registers in the MSI capability in
Configuration Space, MSI-X is configured via tables in Memory Space.
These MSI-X tables are mapped by a device BAR, and if no Memory Space
has been assigned to the BAR, MSI-X cannot be used.
Fail MSI-X setup if no space has been assigned for the BAR.
Previously, we ioremapped the MSI-X table even if the resource hadn't been
assigned.  In this case, the resource address is undefined (and is often
zero), which may lead to warnings or oopses in this path:
  pci_enable_msix
    msix_capability_init
      msix_map_region
        ioremap_nocache
The PCI core sets resource flags to zero when it can't assign space for the
resource (see reset_resource()).  There are also some cases where it sets
the IORESOURCE_UNSET flag, e.g., pci_reassigndev_resource_alignment(),
pci_assign_resource(), etc.  So we must check for both cases.
[bhelgaas: changelog]
Reported-by:  Zhang Jukuo <zhangjukuo@huawei.com>
Tested-by:
Zhang Jukuo <zhangjukuo@huawei.com>
Tested-by:  Zhang Jukuo <zhangjukuo@huawei.com>
Signed-off-by:
Zhang Jukuo <zhangjukuo@huawei.com>
Signed-off-by:  Yijing Wang <wangyijing@huawei.com>
Signed-off-by:
Yijing Wang <wangyijing@huawei.com>
Signed-off-by:  Bjorn Helgaas <bhelgaas@google.com>
Bjorn Helgaas <bhelgaas@google.com>
Loading
Please register or sign in to comment
