Re: [PATCH v3 26/34] powerpc/PCI: convert to pci_create_root_bus()

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

 



On Fri, Oct 28, 2011 at 4:27 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote:
> Convert from pci_create_bus() to pci_create_root_bus().  This way the root
> bus resources are correct immediately.  This patch doesn't fix a problem
> because powerpc fixed the resources before scanning the bus, but it makes
> powerpc more consistent with other architectures.
>
> CC: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> ---
>  arch/powerpc/kernel/pci-common.c |   25 ++++++++++++++-----------
>  1 files changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
> index 942ced2..8c47c57 100644
> --- a/arch/powerpc/kernel/pci-common.c
> +++ b/arch/powerpc/kernel/pci-common.c
> @@ -1554,14 +1554,13 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
>        return pci_enable_resources(dev, mask);
>  }
>
> -static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose)
> +static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, struct list_head *resources)
>  {
> -       struct pci_bus *bus = hose->bus;
>        struct resource *res;
>        int i;
>
>        /* Hookup PHB IO resource */
> -       bus->resource[0] = res = &hose->io_resource;
> +       res = &hose->io_resource;
>
>        if (!res->flags) {
>                printk(KERN_WARNING "PCI: I/O resource not set for host"
> @@ -1579,6 +1578,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose)
>                 (unsigned long long)res->start,
>                 (unsigned long long)res->end,
>                 (unsigned long)res->flags);
> +       pci_add_resource(resources, res);
>
>        /* Hookup PHB Memory resources */
>        for (i = 0; i < 3; ++i) {
> @@ -1596,12 +1596,12 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose)
>                        res->flags = IORESOURCE_MEM;
>  #endif /* CONFIG_PPC32 */
>                }
> -               bus->resource[i+1] = res;
>
>                pr_debug("PCI: PHB MEM resource %d = %016llx-%016llx [%lx]\n", i,
>                         (unsigned long long)res->start,
>                         (unsigned long long)res->end,
>                         (unsigned long)res->flags);
> +               pci_add_resource(resources, res);
>        }
>
>        pr_debug("PCI: PHB MEM offset     = %016llx\n",
> @@ -1695,6 +1695,7 @@ struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus)
>  */
>  void __devinit pcibios_scan_phb(struct pci_controller *hose)
>  {
> +       LIST_HEAD(resources);
>        struct pci_bus *bus;
>        struct device_node *node = hose->dn;
>        int mode;
> @@ -1702,22 +1703,24 @@ void __devinit pcibios_scan_phb(struct pci_controller *hose)
>        pr_debug("PCI: Scanning PHB %s\n",
>                 node ? node->full_name : "<NO NAME>");
>
> +       /* Get some IO space for the new PHB */
> +       pcibios_setup_phb_io_space(hose);
> +
> +       /* Wire up PHB bus resources */
> +       pcibios_setup_phb_resources(hose, &resources);
> +
>        /* Create an empty bus for the toplevel */
> -       bus = pci_create_bus(hose->parent, hose->first_busno, hose->ops, hose);
> +       bus = pci_create_root_bus(hose->parent, hose->first_busno,
> +                                 hose->ops, hose, resources);

Typo here ("resources" should be "&resources") broke the build,
corrected patch attached.  (Also available
at git://github.com/bjorn-helgaas/linux.git on the "pci-scan-v4"
branch as 481c96ef546fd0a1ebd9254771f24d136aaff7cc)

Attachment: patch.convert-to-pci_create_root_bus
Description: Binary data


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux