Re: [PATCH -v11 00/30] PCI: allocate pci bus num range for unassigned bridge busn
From: Bjorn Helgaas <bhelgaas@google.com>
Date: 2012-05-02 21:22:26
Also in:
linux-pci, lkml
On Sun, Mar 18, 2012 at 11:42 PM, Yinghai Lu [off-list ref] wrote:
Set up iobusn_resource tree, and register bus number range to it. Later when need to find bus range, will try to allocate from the tree Need to test on arches other than x86. esp for ia64 and powerpc that support more than on peer root buses. The patches need to apply to linux v3.3 + pci-next and [PATCH -v3] PCI: pci_host_bridge related cleanup could be found at: git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-pci-busn-alloc
I started merging this series, but I didn't get very far. I stopped at the "resources: Add probe_resource()" patch because I don't think that interface makes sense yet. My work-in-progress is at git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git on the topic/yinghai-busn-alloc branch. I *could* merge that branch, but I don't think they fix anything (that would come in the later patches), and there are still some issues in my mind. - I think we really want a [bus 00-ff] resource for each *domain*, with each host bridge in the domain requesting part of that range. I think these patches only track bus number usage within each host bridge, and I'm not sure there's any place we would detect conflicts between host bridges. - I think I made a mistake in the pci_create_root_bus() and pci_scan_root_bus() interfaces. They currently take a bus number and a list of resources, and we expect the arch to include the bus number aperture in the list. The bus number argument should have been replaced with a bus number aperture resource. The bus number aperture is essential, while the MMIO/IO aperture list may be empty. And it's stupid to pass both the starting bus number and a bus resource that contains the starting bus number. Fixing this would make some of these patches quite a bit simpler. - In some of the arches (sparc, powerpc), you added a bus number resource right next to existing first_busno, last_busno fields. So now that data lives two places, which will bite us later. Bjorn
Yinghai Lu (30): x86, PCI: Add print all root info for not using _CRS path x86, PCI: Allocate temp range array in amd_bus pci_root_info probing x86, PCI: Merge pcibios_scan_root and pci_scan_bus_on_node PCI: Add busn_res into struct pci_bus. PCI: Add busn_res operation functions PCI: Release busn_res when removing bus PCI: Insert busn_res in pci_create_root_bus() PCI: Checking busn_res in pci_scan_root_bus() PCI: Add default busn_resource PCI: Add default busn_res for pci_scan_bus() x86, PCI: Add busn_res into resources list for acpi path x86, PCI: Put busn resource in pci_root_info for not using _CRS path PCI, ia64: Register busn_res for root buses PCI, sparc: Register busn_res for root buses PCI, powerpc: Register busn_res for root buses PCI, parisc: Register busn_res for root buses resources: Add probe_resource() resources: Replace registered resource in tree. PCI: Add pci_bus_extend/shrink_top() PCI: Probe safe range that we can use for unassigned bridge. PCI: Add pci_bus_replace_busn_res() PCI: Allocate bus range instead of use max blindly PCI: Strict checking of valid range for bridge PCI: Kill pci_fixup_parent_subordinate_busnr() PCI: Seperate child bus scanning to two passes overall pcmcia: Remove workaround for fixing pci parent bus subordinate PCI: Double checking setting for bus register and bus struct. PCI, pciehp: Remove not needed bus number range checking PCI: More strict checking of valid range for bridge PCI: Don't shrink too much for hotplug bridge arch/ia64/pci/pci.c | 2 + arch/powerpc/include/asm/pci-bridge.h | 1 + arch/powerpc/kernel/pci-common.c | 10 +- arch/sparc/kernel/pci.c | 4 + arch/sparc/kernel/pci_impl.h | 1 + arch/x86/pci/acpi.c | 11 +- arch/x86/pci/amd_bus.c | 14 +- arch/x86/pci/bus_numa.c | 30 ++- arch/x86/pci/bus_numa.h | 4 +- arch/x86/pci/common.c | 27 +-- drivers/parisc/dino.c | 5 + drivers/parisc/lba_pci.c | 3 + drivers/pci/hotplug/pciehp_pci.c | 12 +- drivers/pci/probe.c | 439 +++++++++++++++++++++++++++------ drivers/pci/remove.c | 1 + drivers/pcmcia/yenta_socket.c | 75 ------ include/linux/ioport.h | 8 + include/linux/pci.h | 6 + kernel/resource.c | 175 +++++++++++++- 19 files changed, 613 insertions(+), 215 deletions(-) -- 1.7.7