All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Ott <sebott@linux.ibm.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: linux-pci@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Russell Currey <ruscur@russell.cc>,
	linuxppc-dev@lists.ozlabs.org,
	Oliver OHalloran <oliveroh@au1.ibm.com>
Subject: [PATCH 1/2] pci: provide add_vfs/del_vfs callbacks
Date: Thu, 13 Sep 2018 14:41:23 +0200	[thread overview]
Message-ID: <20180913124124.14632-2-sebott@linux.ibm.com> (raw)
In-Reply-To: <20180913124124.14632-1-sebott@linux.ibm.com>

Provide callbacks that can be used by PCI host bridge implementations
to override the behavior of the generic vf detection and device
creation code.

Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
---
 drivers/pci/iov.c   | 51 +++++++++++++++++++++++++++++++++++++++------------
 include/linux/pci.h |  2 ++
 2 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 0f04ae648cf1..b2ddfe30c5d8 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -251,6 +251,41 @@ int __weak pcibios_sriov_disable(struct pci_dev *pdev)
 	return 0;
 }
 
+static int pcibios_sriov_add_vfs(struct pci_dev *dev, u16 num_vfs)
+{
+	struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus);
+	unsigned int i;
+	int rc;
+
+	if (bridge->add_vfs)
+		return bridge->add_vfs(dev, num_vfs);
+
+	for (i = 0; i < num_vfs; i++) {
+		rc = pci_iov_add_virtfn(dev, i);
+		if (rc)
+			goto failed;
+	}
+	return 0;
+failed:
+	while (i--)
+		pci_iov_remove_virtfn(dev, i);
+
+	return rc;
+}
+
+static void pcibios_sriov_del_vfs(struct pci_dev *dev)
+{
+	struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus);
+	struct pci_sriov *iov = dev->sriov;
+	int i;
+
+	if (bridge->del_vfs)
+		return bridge->del_vfs(dev);
+
+	for (i = 0; i < iov->num_VFs; i++)
+		pci_iov_remove_virtfn(dev, i);
+}
+
 static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
 {
 	int rc;
@@ -336,21 +371,15 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
 	msleep(100);
 	pci_cfg_access_unlock(dev);
 
-	for (i = 0; i < initial; i++) {
-		rc = pci_iov_add_virtfn(dev, i);
-		if (rc)
-			goto failed;
-	}
+	rc = pcibios_sriov_add_vfs(dev, initial);
+	if (rc)
+		goto err_pcibios;
 
 	kobject_uevent(&dev->dev.kobj, KOBJ_CHANGE);
 	iov->num_VFs = nr_virtfn;
 
 	return 0;
 
-failed:
-	while (i--)
-		pci_iov_remove_virtfn(dev, i);
-
 err_pcibios:
 	iov->ctrl &= ~(PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE);
 	pci_cfg_access_lock(dev);
@@ -369,14 +398,12 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
 
 static void sriov_disable(struct pci_dev *dev)
 {
-	int i;
 	struct pci_sriov *iov = dev->sriov;
 
 	if (!iov->num_VFs)
 		return;
 
-	for (i = 0; i < iov->num_VFs; i++)
-		pci_iov_remove_virtfn(dev, i);
+	pcibios_sriov_del_vfs(dev);
 
 	iov->ctrl &= ~(PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE);
 	pci_cfg_access_lock(dev);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 680b6bcd0b97..bf99ae98ecb5 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -475,6 +475,8 @@ struct pci_host_bridge {
 	int (*free_irq)(struct pci_dev *);
 	void (*add_bus)(struct pci_bus *);
 	void (*remove_bus)(struct pci_bus *);
+	int (*add_vfs)(struct pci_dev *dev, u16 num_vfs);
+	void (*del_vfs)(struct pci_dev *dev);
 	void		*release_data;
 	struct msi_controller *msi;
 	unsigned int	ignore_reset_delay:1;	/* For entire hierarchy */
-- 
2.13.4

  reply	other threads:[~2018-09-13 12:41 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-12 12:34 [PATCH 0/2] sriov enablement on s390 Sebastian Ott
2018-09-12 12:34 ` [PATCH 1/2] pci: provide pcibios_sriov_add_vfs Sebastian Ott
2018-09-12 12:34 ` [PATCH 2/2] s390/pci: handle function enumeration after sriov enablement Sebastian Ott
2018-09-12 13:02 ` [PATCH 0/2] sriov enablement on s390 Bjorn Helgaas
2018-09-12 14:40   ` Benjamin Herrenschmidt
2018-09-13 12:41   ` Sebastian Ott
2018-09-13 12:41     ` Sebastian Ott [this message]
2018-09-13 12:41     ` [PATCH 2/2] s390/pci: handle function enumeration after sriov enablement Sebastian Ott
2018-10-10 12:55   ` [PATCH 0/2] sriov enablement on s390 Sebastian Ott
2018-10-10 12:55     ` Sebastian Ott
2018-10-10 16:26     ` Bjorn Helgaas
2018-10-10 16:26       ` Bjorn Helgaas
2018-12-05 13:45       ` Sebastian Ott
2018-12-05 13:45         ` Sebastian Ott
2018-12-12 21:54         ` Bjorn Helgaas
2018-12-12 21:54           ` Bjorn Helgaas
2018-12-13 17:54           ` [PATCH 1/2] PCI: provide pcibios_sriov_add_vfs Sebastian Ott
2018-12-13 17:54             ` Sebastian Ott
2018-12-14 13:12             ` Christoph Hellwig
2018-12-14 13:12               ` Christoph Hellwig
2018-12-13 17:54           ` [PATCH 2/2] s390/pci: handle function enumeration after sriov enablement Sebastian Ott
2018-12-13 17:54             ` Sebastian Ott
2018-12-14 13:12             ` Christoph Hellwig
2018-12-14 13:12               ` Christoph Hellwig
2018-12-14 13:18               ` Christoph Hellwig
2018-12-14 13:18                 ` Christoph Hellwig
2018-12-17 17:30                 ` Sebastian Ott
2018-12-17 17:30                   ` Sebastian Ott
2018-12-17 17:35                   ` Christoph Hellwig
2018-12-17 17:35                     ` Christoph Hellwig
2018-12-18 10:16                     ` [PATCH 1/2] PCI/IOV: provide flag to skip VF scanning Sebastian Ott
2018-12-18 10:16                       ` Sebastian Ott
2018-12-19  7:52                       ` Christoph Hellwig
2018-12-19  7:52                         ` Christoph Hellwig
2018-12-20 20:07                       ` Bjorn Helgaas
2018-12-20 20:07                         ` Bjorn Helgaas
2018-12-21 14:14                         ` [PATCH 1/3] PCI/IOV: factor out sriov_add_vfs Sebastian Ott
2018-12-21 14:14                           ` Sebastian Ott
2018-12-21 14:14                         ` [PATCH 2/3] PCI/IOV: provide flag to skip VF scanning Sebastian Ott
2018-12-21 14:14                           ` Sebastian Ott
2018-12-21 14:14                         ` [PATCH 3/3] s390/pci: " Sebastian Ott
2018-12-21 14:14                           ` Sebastian Ott
2018-12-21 14:19                         ` [PATCH 1/2] PCI/IOV: provide flag to " Sebastian Ott
2018-12-21 14:19                           ` Sebastian Ott
2019-01-02  1:14                           ` Bjorn Helgaas
2019-01-02  1:14                             ` Bjorn Helgaas
2018-12-18 10:16                     ` [PATCH 2/2] s390/pci: " Sebastian Ott
2018-12-18 10:16                       ` Sebastian Ott
2018-12-19  7:52                       ` Christoph Hellwig
2018-12-19  7:52                         ` Christoph Hellwig

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=20180913124124.14632-2-sebott@linux.ibm.com \
    --to=sebott@linux.ibm.com \
    --cc=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=helgaas@kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=oliveroh@au1.ibm.com \
    --cc=paulus@samba.org \
    --cc=ruscur@russell.cc \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.