On Tue, Jun 27, 2017 at 05:24:11PM +0800, Ryder Lee wrote: > With the introduction of pci_scan_root_bus_bridge() there is no need to > export pci_register_host_bridge() to other kernel subsystems other than the > PCI compilation unit that needs it. > > Make pci_register_host_bridge() static to its compilation unit and convert > the existing drivers usage over to pci_scan_root_bus_bridge(). > > Also, when probing the PCI host controller driver, if an error occurs, the probe > function code does not free memory allocated for the struct pci_host_bridge > resulting in memory leakage. > > This patch fixes them by using the methods that introduces by Lorenzo. > > Signed-off-by: Ryder Lee <ryder.lee@xxxxxxxxxxxx> I rebased my pci/host-mediatek branch on top of pci/enumeration (which contains the series from Lorenzo), and folded this into the initial MediaTek driver commit. This branch: https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git/commit/?h=pci/host-mediatek&id=b6ca15d18881b784dc9efc5d81989be26ecd9fc8 should have all the MediaTek bits I know about. Can you double-check it, please? If all goes well, I'll incorporate this into -next tomorrow. > --- > drivers/pci/host/pcie-mediatek.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/pci/host/pcie-mediatek.c b/drivers/pci/host/pcie-mediatek.c > index 3baafa8..514ef34 100644 > --- a/drivers/pci/host/pcie-mediatek.c > +++ b/drivers/pci/host/pcie-mediatek.c > @@ -482,12 +482,10 @@ static int mtk_pcie_register_host(struct pci_host_bridge *host) > host->dev.parent = pcie->dev; > host->ops = &mtk_pcie_ops; > > - err = pci_register_host_bridge(host); > + err = pci_scan_root_bus_bridge(host); > if (err < 0) > return err; > > - pci_scan_child_bus(host->bus); > - > pci_fixup_irqs(pci_common_swizzle, of_irq_parse_and_map_pci); > pci_bus_size_bridges(host->bus); > pci_bus_assign_resources(host->bus); > @@ -506,7 +504,7 @@ static int mtk_pcie_probe(struct platform_device *pdev) > struct pci_host_bridge *host; > int err; > > - host = pci_alloc_host_bridge(sizeof(*pcie)); > + host = devm_pci_alloc_host_bridge(&pdev->dev, sizeof(*pcie)); > if (!host) > return -ENOMEM; > > -- > 1.9.1 >