linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: linux-pci@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-kernel@vger.kernel.org,
	Christoph Hellwig <hch@infradead.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
	Arnd Bergmann <arnd@arndb.de>
Subject: [RFC 15/15] PCI: make pcibios_add_bus/remove_bus callbacks
Date: Fri, 17 Aug 2018 12:26:45 +0200	[thread overview]
Message-ID: <20180817102645.3839621-16-arnd@arndb.de> (raw)
In-Reply-To: <20180817102645.3839621-1-arnd@arndb.de>

These are mostly not architecture specific but are meant for particular
PCI host bridge implementations, in particular for the ACPI version.

Turn them both into callback functions that are implemented by the
APCI PCI implementation as well as the one architecture that overrides
pcibios_remove_bus.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/arm64/kernel/pci.c | 10 ----------
 arch/ia64/pci/pci.c     | 10 ----------
 arch/s390/pci/pci.c     |  3 ++-
 arch/x86/pci/common.c   | 10 ----------
 drivers/acpi/pci_root.c |  2 ++
 drivers/pci/probe.c     | 12 ++++++++++--
 include/linux/pci.h     |  2 ++
 7 files changed, 16 insertions(+), 33 deletions(-)

diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
index 8958a7c32a9f..99fac25efe88 100644
--- a/arch/arm64/kernel/pci.c
+++ b/arch/arm64/kernel/pci.c
@@ -191,14 +191,4 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 	return bus;
 }
 
-void pcibios_add_bus(struct pci_bus *bus)
-{
-	acpi_pci_add_bus(bus);
-}
-
-void pcibios_remove_bus(struct pci_bus *bus)
-{
-	acpi_pci_remove_bus(bus);
-}
-
 #endif
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 511b8a058d80..f47e0920d308 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -367,16 +367,6 @@ void pcibios_fixup_bus(struct pci_bus *b)
 	platform_pci_fixup_bus(b);
 }
 
-void pcibios_add_bus(struct pci_bus *bus)
-{
-	acpi_pci_add_bus(bus);
-}
-
-void pcibios_remove_bus(struct pci_bus *bus)
-{
-	acpi_pci_remove_bus(bus);
-}
-
 void pcibios_set_master (struct pci_dev *dev)
 {
 	/* No special bus mastering setup handling */
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index b21205f131ce..120beb83b6a5 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -769,7 +769,7 @@ static void zpci_free_domain(struct zpci_dev *zdev)
 	spin_unlock(&zpci_domain_lock);
 }
 
-void pcibios_remove_bus(struct pci_bus *bus)
+static void zpci_remove_bus(struct pci_bus *bus)
 {
 	struct zpci_dev *zdev = get_zdev_by_bus(bus);
 
@@ -801,6 +801,7 @@ static struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
 	bridge->sysdata = sysdata;
 	bridge->busnr = bus;
 	bridge->ops = ops;
+	bridge->remove_bus = zpci_remove_bus;
 
 	error = pci_scan_root_bus_bridge(bridge);
 	if (error < 0)
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 920d0885434c..987e6fefd5d3 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -168,16 +168,6 @@ void pcibios_fixup_bus(struct pci_bus *b)
 		pcibios_fixup_device_resources(dev);
 }
 
-void pcibios_add_bus(struct pci_bus *bus)
-{
-	acpi_pci_add_bus(bus);
-}
-
-void pcibios_remove_bus(struct pci_bus *bus)
-{
-	acpi_pci_remove_bus(bus);
-}
-
 /*
  * Only use DMI information to set this if nothing was passed
  * on the kernel command line (which was parsed earlier).
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 5da0f70c4e65..cf7a9a7bf1e7 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -911,6 +911,8 @@ struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root,
 	bridge->busnr = busnum;
 	bridge->ops = ops->pci_ops;
 	bridge->prepare = acpi_pci_root_bridge_prepare;
+	bridge->add_bus = acpi_pci_add_bus;
+	bridge->remove_bus = acpi_pci_remove_bus;
 	pci_set_host_bridge_release(bridge, acpi_pci_root_release_info,
 				    info);
 
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index f493d7e299e6..86a678fa8c13 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2905,12 +2905,20 @@ unsigned int pci_scan_child_bus(struct pci_bus *bus)
 }
 EXPORT_SYMBOL_GPL(pci_scan_child_bus);
 
-void __weak pcibios_add_bus(struct pci_bus *bus)
+void pcibios_add_bus(struct pci_bus *bus)
 {
+	struct pci_host_bridge *bridge = pci_find_host_bridge(bus);
+
+	if (bridge->add_bus)
+		bridge->add_bus(bus);
 }
 
-void __weak pcibios_remove_bus(struct pci_bus *bus)
+void pcibios_remove_bus(struct pci_bus *bus)
 {
+	struct pci_host_bridge *bridge = pci_find_host_bridge(bus);
+
+	if (bridge->remove_bus)
+		bridge->remove_bus(bus);
 }
 
 int pci_host_probe(struct pci_host_bridge *bridge)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 24216daef6f8..bc9635313747 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -479,6 +479,8 @@ struct pci_host_bridge {
 	void (*bus_add_device)(struct pci_dev *pdev);
 	int (*alloc_irq)(struct pci_dev *);
 	int (*free_irq)(struct pci_dev *);
+	void (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
 	void		*release_data;
 	struct msi_controller *msi;
 	unsigned int	ignore_reset_delay:1;	/* For entire hierarchy */
-- 
2.18.0

  parent reply	other threads:[~2018-08-17 13:30 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-17 10:26 [RFC 00/15] PCI: turn some __weak functions into callbacks Arnd Bergmann
2018-08-17 10:26 ` [RFC 01/15] PCI: clean up legacy host bridge scan functions Arnd Bergmann
2018-08-17 10:26 ` [RFC 02/15] PCI: move pci_scan_bus into callers Arnd Bergmann
2018-08-17 10:26 ` [RFC 03/15] PCI: move pci_scan_root_bus " Arnd Bergmann
2018-08-17 10:26 ` [RFC 04/15] PCI: export pci_register_host_bridge Arnd Bergmann
2018-08-17 10:26 ` [RFC 05/15] PCI: move pci_create_root_bus into callers Arnd Bergmann
2018-08-17 10:26 ` [RFC 06/15] powerpc/pci: fold pci_create_root_bus into pcibios_scan_phb Arnd Bergmann
2018-08-17 10:26 ` [RFC 07/15] PCI/ACPI: clean up acpi_pci_root_create() Arnd Bergmann
2018-08-20  8:23   ` Rafael J. Wysocki
2018-08-20 11:19     ` Arnd Bergmann
2018-08-20 11:24       ` Rafael J. Wysocki
2018-08-20 11:36         ` Arnd Bergmann
2018-08-17 10:26 ` [RFC 08/15] x86: PCI: clean up pcibios_scan_root() Arnd Bergmann
2018-08-20  8:31   ` Rafael J. Wysocki
2018-08-20 11:16     ` Arnd Bergmann
2018-08-20 11:26       ` Rafael J. Wysocki
2018-08-17 10:26 ` [RFC 09/15] PCI: xenfront: clean up pcifront_scan_root() Arnd Bergmann
2018-08-17 10:26 ` [RFC 10/15] sparc/PCI: simplify pci_scan_one_pbm Arnd Bergmann
2018-08-17 10:26 ` [RFC 11/15] PCI: hyperv: convert to pci_scan_root_bus_bridge Arnd Bergmann
2018-08-17 10:26 ` [RFC 12/15] PCI: make pcibios_bus_add_device() a callback function Arnd Bergmann
2018-08-17 10:26 ` [RFC 13/15] PCI: turn pcibios_alloc_irq into a callback Arnd Bergmann
2018-08-17 10:26 ` [RFC 14/15] PCI: make pcibios_root_bridge_prepare " Arnd Bergmann
2018-08-17 10:26 ` Arnd Bergmann [this message]
2018-08-21  6:14 ` [RFC 00/15] PCI: turn some __weak functions into callbacks Christoph Hellwig
2018-08-21 10:07   ` Arnd Bergmann
2018-08-21 11:30   ` David Woodhouse
2018-08-21 13:14     ` Christoph Hellwig
2018-10-02 20:59 ` Bjorn Helgaas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180817102645.3839621-16-arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=hch@infradead.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lorenzo.pieralisi@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).