• Bjorn Helgaas's avatar
    PCI: fall back to original BIOS BAR addresses · 58c84eda
    Bjorn Helgaas authored
    If we fail to assign resources to a PCI BAR, this patch makes us try the
    original address from BIOS rather than leaving it disabled.
    
    Linux tries to make sure all PCI device BARs are inside the upstream
    PCI host bridge or P2P bridge apertures, reassigning BARs if necessary.
    Windows does similar reassignment.
    
    Before this patch, if we could not move a BAR into an aperture, we left
    the resource unassigned, i.e., at address zero.  Windows leaves such BARs
    at the original BIOS addresses, and this patch makes Linux do the same.
    
    This is a bit ugly because we disable the resource long before we try to
    reassign it, so we have to keep track of the BIOS BAR address somewhere.
    For lack of a better place, I put it in the struct pci_dev.
    
    I think it would be cleaner to attempt the assignment immediately when the
    claim fails, so we could easily remember the original address.  But we
    currently claim motherboard resources in the middle, after attempting to
    claim PCI resources and before assigning new PCI resources, and changing
    that is a fairly big job.
    
    Addresses https://bugzilla.kernel.org/show_bug.cgi?id=16263Reported-by: default avatarAndrew <nitr0@seti.kr.ua>
    Tested-by: default avatarAndrew <nitr0@seti.kr.ua>
    Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    58c84eda
i386.c 8.83 KB