• Y
    PCI: Workaround missing pci_set_master in pci drivers · cf3e1feb
    Yinghai Lu 提交于
    Ben Herrenschmidt found that commit 928bea96 ("PCI: Delay enabling
    bridges until they're needed") breaks PCI in some powerpc environments.
    
    The reason is that the PCIe port driver will call pci_enable_device() on
    the bridge, so the device is enabled, but skips pci_set_master because
    pcie_port_auto and no acpi on powerpc.
    
    Because of that, pci_enable_bridge() later on (called as a result of the
    child device driver doing pci_enable_device) will see the bridge as
    already enabled and will not call pci_set_master() on it.
    
    Fixed by add checking in pci_enable_bridge, and call pci_set_master
    if driver skip that.
    
    That will make the code more robot and wade off problem for missing
    pci_set_master in drivers.
    Reported-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: NYinghai Lu <yinghai@kernel.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    cf3e1feb
pci.c 114.6 KB