On Fri, Aug 26, 2011 at 7:54 AM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > On Fri, Aug 26, 2011 at 3:07 AM, Deng-Cheng Zhu <dczhu@xxxxxxxx> wrote: >> Change the pci_create_bus() interface to pass in available resources to get them >> settled down early. This is to avoid possible resource conflicts while doing >> pci_scan_slot() in pci_scan_child_bus(). Note that pcibios_fixup_bus() can get >> rid of such conflicts, but it's done AFTER scanning slots. >> >> In addition, MIPS PCI resources are now fixed using this new interface. >> >> -- Changes -- >> v3 - v2: >> o Do not do fixups for root buses in pcibios_fixup_bus(). >> o Skip bus creation when bus resources cannot be allocated. >> o PCI domain/bus numbers added to the error info in controller_resources(). >> >> v2 - v1: >> o Merge [PATCH 1/3] to [PATCH 3/3], so now 2 patches in total. >> o Add more info to patch description. >> o Fix arch breaks in default resource setup discovered by Bjorn Helgaas. >> >> Deng-Cheng Zhu (2): >> PCI: Pass available resources into pci_create_bus() >> MIPS: PCI: Pass controller's resources to pci_create_bus() in >> pcibios_scanbus() >> >> arch/microblaze/pci/pci-common.c | 3 +- >> arch/mips/pci/pci.c | 61 +++++++++++++++++++++++++++++++++----- >> arch/powerpc/kernel/pci-common.c | 3 +- >> arch/sparc/kernel/pci.c | 3 +- >> arch/x86/pci/acpi.c | 2 +- >> drivers/pci/probe.c | 15 +++++++-- >> include/linux/pci.h | 3 +- >> 7 files changed, 73 insertions(+), 17 deletions(-) > > This is beautiful. Thanks for doing this work! I hope other > architectures will follow your lead and get rid of their root bus > resource fixups. > > Reviewed-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > One logistical issue here is that the first patch touches several architectures at once, which puts Jesse in a bit of a pinch. If he applies it, there's always the possibility that an arch patch will conflict with it, which makes merging harder. It might be easier if, instead of changing the pci_create_bus() interface, you added a new one (it could call pci_create_bus() then replace the resources, so the implementation could still be mostly shared.) We already have a plethora of "create bus" methods (pci_create_bus(), pci_scan_bus_parented(), pci_scan_bus()), but if you added a pci_create_root_bus() or something similar, maybe we could try to converge on it and obsolete the others. Then the first patch would touch only the PCI core, and the second would touch only MIPS, which would make merging more straightforward. Bjorn