Skip to content
  • Bjorn Helgaas's avatar
    x86/PCI: coalesce overlapping host bridge windows · 4723d0f2
    Bjorn Helgaas authored
    Some BIOSes provide PCI host bridge windows that overlap, e.g.,
    
        pci_root PNP0A03:00: host bridge window [mem 0xb0000000-0xffffffff]
        pci_root PNP0A03:00: host bridge window [mem 0xafffffff-0xdfffffff]
        pci_root PNP0A03:00: host bridge window [mem 0xf0000000-0xffffffff]
    
    If we simply insert these as children of iomem_resource, the second window
    fails because it conflicts with the first, and the third is inserted as a
    child of the first, i.e.,
    
        b0000000-ffffffff PCI Bus 0000:00
          f0000000-ffffffff PCI Bus 0000:00
    
    When we claim PCI device resources, this can cause collisions like this
    if we put them in the first window:
    
        pci 0000:00:01.0: address space collision: [mem 0xff300000-0xff4fffff] conflicts with PCI Bus 0000:00 [mem 0xf0000000-0xffffffff]
    
    Host bridge windows are top-level resources by definition, so it doesn't
    make sense to make the third window a child of the first.  This patch
    coalesces any host bridge windows that overlap.  For the example above,
    the result is this single window:
    
        pci_root PNP0A03:00: host bridge window [mem 0xafffffff-0xffffffff]
    
    This fixes a 2.6.34 regression.
    
    Reference: https://bugzilla.kernel.org/show_bug.cgi?id=17011
    
    
    Reported-and-tested-by: default avatarAnisse Astier <anisse@astier.eu>
    Reported-and-tested-by: default avatarPramod Dematagoda <pmd.lotr.gandalf@gmail.com>
    Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    4723d0f2