On Fri, Sep 27, 2013 at 9:01 AM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: > On Fri, Sep 27, 2013 at 1:28 AM, Benjamin Herrenschmidt > <benh@xxxxxxxxxxxxxxxxxxx> wrote: >> Hi Linus, Yinghai ! >> >> Please consider reverting: >> >> 928bea964827d7824b548c1f8e06eccbbc4d0d7d >> PCI: Delay enabling bridges until they're needed >> >> (I'd suggest to revert now and maybe merge a better patch later) >> >> This breaks PCI on the PowerPC "powernv" platform (which is booted via >> kexec) and probably x86 as well under similar circumstances. It will >> basically break PCIe if the bus master bit of the bridge isn't set at >> boot (by the firmware for example, or because kexec'ing cleared it). >> >> The reason is that the PCIe port driver will call pci_enable_device() on >> the bridge (on everything under the sun actually), which will marked the >> device enabled (but will not do a set_master). >> >> 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. Ben, looks like PCIe port driver does call pci_enable_device AND pci_set_master() | int pcie_port_device_register(struct pci_dev *dev) | { | int status, capabilities, i, nr_service; | int irqs[PCIE_PORT_DEVICE_MAXSERVICES]; | | /* Enable PCI Express port device */ | status = pci_enable_device(dev); | if (status) | return status; | | /* Get and check PCI Express port services */ | capabilities = get_port_device_capability(dev); | if (!capabilities) | return 0; | | pci_set_master(dev); so how come that pci_set_master is not called for powerpc? Can you send out lspci -vvxxx with current linus-tree and v3.11? Yinghai -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html