On Fri, 16 Dec 2011 14:24:01 -0700 Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > On Fri, Oct 28, 2011 at 4:26 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > > 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@xxxxxxxxxxxxxxx > > Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > > --- > > 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 __init > > common_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
Attachment:
signature.asc
Description: PGP signature