On 30/09/2019 12:08, Oliver O'Halloran wrote: > With the previous patch applied pcibios_setup_device() will always be run > when pcibios_bus_add_device() is called. There are several code paths where > pcibios_setup_bus_device() is still called (the PowerPC specific PCI > hotplug support is one) so with just the previous patch applied the setup > can be run multiple times on a device, once before the device is added > to the bus and once after. > > There's no need to run the setup in the early case any more so just > remove it entirely. > > Signed-off-by: Oliver O'Halloran <oohall@xxxxxxxxx> Tested-by: Alexey Kardashevskiy <aik@xxxxxxxxx> Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxxxx> > --- > arch/powerpc/include/asm/pci.h | 1 - > arch/powerpc/kernel/pci-common.c | 25 ------------------------- > arch/powerpc/kernel/pci-hotplug.c | 1 - > arch/powerpc/kernel/pci_of_scan.c | 1 - > 4 files changed, 28 deletions(-) > > diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h > index 327567b..63ed7e3 100644 > --- a/arch/powerpc/include/asm/pci.h > +++ b/arch/powerpc/include/asm/pci.h > @@ -113,7 +113,6 @@ extern pgprot_t pci_phys_mem_access_prot(struct file *file, > pgprot_t prot); > > extern resource_size_t pcibios_io_space_offset(struct pci_controller *hose); > -extern void pcibios_setup_bus_devices(struct pci_bus *bus); > extern void pcibios_setup_bus_self(struct pci_bus *bus); > extern void pcibios_setup_phb_io_space(struct pci_controller *hose); > extern void pcibios_scan_phb(struct pci_controller *hose); > diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c > index b89925ed..f8a59d7 100644 > --- a/arch/powerpc/kernel/pci-common.c > +++ b/arch/powerpc/kernel/pci-common.c > @@ -1000,24 +1000,6 @@ int pcibios_add_device(struct pci_dev *dev) > return 0; > } > > -void pcibios_setup_bus_devices(struct pci_bus *bus) > -{ > - struct pci_dev *dev; > - > - pr_debug("PCI: Fixup bus devices %d (%s)\n", > - bus->number, bus->self ? pci_name(bus->self) : "PHB"); > - > - list_for_each_entry(dev, &bus->devices, bus_list) { > - /* Cardbus can call us to add new devices to a bus, so ignore > - * those who are already fully discovered > - */ > - if (pci_dev_is_added(dev)) > - continue; > - > - pcibios_setup_device(dev); > - } > -} > - > void pcibios_set_master(struct pci_dev *dev) > { > /* No special bus mastering setup handling */ > @@ -1036,13 +1018,6 @@ void pcibios_fixup_bus(struct pci_bus *bus) > } > EXPORT_SYMBOL(pcibios_fixup_bus); > > -void pci_fixup_cardbus(struct pci_bus *bus) > -{ > - /* Now fixup devices on that bus */ > - pcibios_setup_bus_devices(bus); > -} > - > - > static int skip_isa_ioresource_align(struct pci_dev *dev) > { > if (pci_has_flag(PCI_CAN_SKIP_ISA_ALIGN) && > diff --git a/arch/powerpc/kernel/pci-hotplug.c b/arch/powerpc/kernel/pci-hotplug.c > index fc62c4b..d6a67f8 100644 > --- a/arch/powerpc/kernel/pci-hotplug.c > +++ b/arch/powerpc/kernel/pci-hotplug.c > @@ -134,7 +134,6 @@ void pci_hp_add_devices(struct pci_bus *bus) > */ > slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); > pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); > - pcibios_setup_bus_devices(bus); > max = bus->busn_res.start; > /* > * Scan bridges that are already configured. We don't touch > diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c > index f91d7e9..c3024f1 100644 > --- a/arch/powerpc/kernel/pci_of_scan.c > +++ b/arch/powerpc/kernel/pci_of_scan.c > @@ -414,7 +414,6 @@ static void __of_scan_bus(struct device_node *node, struct pci_bus *bus, > */ > if (!rescan_existing) > pcibios_setup_bus_self(bus); > - pcibios_setup_bus_devices(bus); > > /* Now scan child busses */ > for_each_pci_bridge(dev, bus) > -- Alexey