Re: [PATCH v3 08/34] alpha/PCI: convert to pci_scan_root_bus() for correct root bus resources

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Bjorn

Attachment: patch.alpha-pci-convert-to-pci_scan_root_bus
Description: Binary data

Attachment: patch.alpha-incremental
Description: Binary data


[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux