]> git.baikalelectronics.ru Git - kernel.git/commit
PCI: Workaround missing pci_set_master in pci drivers
authorYinghai Lu <yinghai@kernel.org>
Sat, 28 Sep 2013 20:13:07 +0000 (13:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 28 Sep 2013 20:25:30 +0000 (13:25 -0700)
commit46437e9e4ae3f0ca38c823a6da6fc01d8772eda2
tree4fcdb114235d5453e0c4abaa06a703f424f991d2
parent2a2a5ce983720a0c09bdfab0d9e0dabc61b377b3
PCI: Workaround missing pci_set_master in pci drivers

Ben Herrenschmidt found that commit d82e87efee34 ("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: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/pci/pci.c