Skip to content
  • Gary Hade's avatar
    PCI: use _CRS for PCI resource allocation · 62f420f8
    Gary Hade authored
    
    
    Use _CRS for PCI resource allocation
    
    This patch resolves an issue where incorrect PCI memory and i/o ranges
    are being assigned to hotplugged PCI devices on some IBM systems.  The
    resource mis-allocation not only makes the PCI device unuseable but
    often makes the entire system unuseable due to resulting machine checks.
    
    The hotplug capable PCI slots on the affected systems are not located
    under a standard P2P bridge but are instead located under PCI root
    bridges or subtractive decode P2P bridges.  For example, the IBM x3850
    contains 2 hotplug capable PCI-X slots and 4 hotplug capable PCIe slots
    with the PCI-X slots each located under a PCI root bridge and the PCIe
    slots each located under a subtractive decode P2P bridge.
    
    The current i386/x86_64 PCI resource allocation code does not use _CRS
    returned resource information.  No other resource information source is
    available for slots that are not below a standard P2P bridge so
    incorrect ranges are being allocated from e820 hole causing the bad
    result.
    
    This patch causes the kernel to use _CRS returned resource info.  It is
    roughly based on a change provided by Matthew Wilcox for the ia64 kernel
    in 2005.  Due to possible buggy BIOS factor and possible yet to be
    discovered kernel issues the function is disabled by default and can be
    enabled with pci=use_crs.
    
    Signed-off-by: default avatarGary Hade <gary.hade@us.ibm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    62f420f8