Re: [PATCH v3 08/34] alpha/PCI: convert to pci_scan_root_bus() for correct root bus resources
From: Jesse Barnes <hidden>
Date: 2012-01-04 17:38:34
Also in:
linux-arch, linux-pci
On Fri, 16 Dec 2011 14:24:01 -0700 Bjorn Helgaas [off-list ref] wrote:
On Fri, Oct 28, 2011 at 4:26 PM, Bjorn Helgaas [off-list ref] wrote:quoted
Convert from pci_scan_bus() to pci_scan_root_bus() and remove root bus resource fixups. This fixes the problem of "early" and "header" quirks seeing incorrect root bus resources. CC: linux-alpha@vger.kernel.org Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> --- arch/alpha/kernel/pci.c | 37 ++++++++++++++++++++----------------- 1 files changed, 20 insertions(+), 17 deletions(-)diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c index c9ab94e..e9e78a2 100644 --- a/arch/alpha/kernel/pci.c +++ b/arch/alpha/kernel/pci.c@@ -286,22 +286,7 @@ pcibios_fixup_bus(struct pci_bus *bus)struct pci_controller *hose = bus->sysdata; struct pci_dev *dev = bus->self; - if (!dev) { - /* Root bus. */ - u32 pci_mem_end; - u32 sg_base = hose->sg_pci ? hose->sg_pci->dma_base : ~0; - unsigned long end; - - bus->resource[0] = hose->io_space; - bus->resource[1] = hose->mem_space; - - /* Adjust hose mem_space limit to prevent PCI allocations - in the iommu windows. */ - pci_mem_end = min((u32)__direct_map_base, sg_base) - 1; - end = hose->mem_space->start + pci_mem_end; - if (hose->mem_space->end > end) - hose->mem_space->end = end; - } else if (pci_probe_only && + if (pci_probe_only && dev && (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { pci_read_bridge_bases(bus); pcibios_fixup_device_resources(dev, bus);@@ -414,13 +399,31 @@ void __initcommon_init_pci(void) { struct pci_controller *hose; + struct list_head resources; struct pci_bus *bus; int next_busno; int need_domain_info = 0; + u32 pci_mem_end; + u32 sg_base; + unsigned long end; /* Scan all of the recorded PCI controllers. */ for (next_busno = 0, hose = hose_head; hose; hose = hose->next) { - bus = pci_scan_bus(next_busno, alpha_mv.pci_ops, hose); + sg_base = hose->sg_pci ? hose->sg_pci->dma_base : ~0; + + /* Adjust hose mem_space limit to prevent PCI allocations + in the iommu windows. */ + pci_mem_end = min((u32)__direct_map_base, sg_base) - 1; + end = hose->mem_space->start + pci_mem_end; + if (hose->mem_space->end > end) + hose->mem_space->end = end; + + INIT_LIST_HEAD(&resources); + pci_add_resource(&resources, &hose->io_space); + pci_add_resource(&resources, &hose->mem_space);These two lines are errors: hose->io_space is already a struct resource pointer, so we shouldn't take the pointer's address. Updated patch and incremental patch attached.
Squashed into the original alpha patch, thanks. -- Jesse Barnes, Intel Open Source Technology Center
Attachments
- signature.asc [application/pgp-signature] 836 bytes