• A
    PCI: Do not disregard parent resources starting at 0x0 · 31342330
    Ard Biesheuvel 提交于
    Commit f44116ae ("PCI: Remove pci_find_parent_resource() use for
    allocation") updated the logic that iterates over all bus resources and
    compares them to a given resource, in order to decide whether one is the
    parent of the latter.
    
    This change inadvertently causes pci_find_parent_resource() to disregard
    resources starting at address 0x0, resulting in an error such as the one
    below on ARM systems whose I/O window starts at 0x0.
    
      pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff window]
      pci_bus 0000:00: root bus resource [io  0x0000-0xffff window]
      pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff window]
      pci_bus 0000:00: root bus resource [bus 00-0f]
      pci 0000:00:01.0: PCI bridge to [bus 01]
      pci 0000:00:02.0: PCI bridge to [bus 02]
      pci 0000:00:03.0: PCI bridge to [bus 03]
      pci 0000:00:03.0: can't claim BAR 13 [io  0x0000-0x0fff]: no compatible bridge window
      pci 0000:03:01.0: can't claim BAR 0 [io  0x0000-0x001f]: no compatible bridge window
    
    While this never happens on x86, it is perfectly legal in general for a PCI
    MMIO or IO window to start at address 0x0, and it was supported in the code
    before commit f44116ae.
    
    Drop the test for res->start != 0; resource_contains() already checks
    whether [start, end) completely covers the resource, and so it should be
    redundant.
    Signed-off-by: NArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
    31342330
pci.c 142.1 KB