linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement
@ 2017-10-31 14:47 Bryant G. Ly
  2017-10-31 14:47 ` [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls Bryant G. Ly
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:47 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, Bryant G. Ly

v1 - Initial patch
v2 - Addressed Bjorn's comment on creating a highly platform
     dependent global exported symbol.
v3 - Based patch off linux-ppc/master
v4 - Using the sriov-drivers_autoprobe mechanism per Bjorn's request

Bryant G. Ly (3):
  powerpc/kernel: Separate SR-IOV Calls
  pseries: Add PSeries SR-IOV Machine dependent calls
  pci/iov: Expose VF drivers Auto Probe Globally

 arch/powerpc/include/asm/machdep.h           |  7 ++++++
 arch/powerpc/include/asm/pci-bridge.h        |  4 +---
 arch/powerpc/kernel/eeh_driver.c             |  4 ++--
 arch/powerpc/kernel/pci-common.c             | 23 +++++++++++++++++++
 arch/powerpc/kernel/pci_dn.c                 |  6 -----
 arch/powerpc/platforms/powernv/eeh-powernv.c | 33 ++++++++++++++--------------
 arch/powerpc/platforms/powernv/pci-ioda.c    |  6 +++--
 arch/powerpc/platforms/pseries/eeh_pseries.c | 24 ++++++++++++++++++++
 arch/powerpc/platforms/pseries/pci.c         | 31 ++++++++++++++++++++++----
 drivers/pci/iov.c                            | 12 ++++++++++
 include/linux/pci.h                          |  2 ++
 11 files changed, 119 insertions(+), 33 deletions(-)

-- 
2.13.5 (Apple Git-94)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls
  2017-10-31 14:47 [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
@ 2017-10-31 14:47 ` Bryant G. Ly
  2017-10-31 14:52   ` Bryant G. Ly
  2017-10-31 14:47 ` [PATCH v4 2/3] pseries: Add PSeries SR-IOV Machine dependent calls Bryant G. Ly
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:47 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, Bryant G. Ly, Juan J . Alvarez

SR-IOV can now be enabled in PowerNV platforms and Pseries
platforms. Therefore, the appropriate calls were moved to
machine dependent code instead of definition at compile time.

Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
Signed-off-by: Juan J. Alvarez <jjalvare@us.ibm.com>
---
 arch/powerpc/include/asm/machdep.h           |  7 ++++++
 arch/powerpc/include/asm/pci-bridge.h        |  4 +---
 arch/powerpc/kernel/eeh_driver.c             |  4 ++--
 arch/powerpc/kernel/pci-common.c             | 23 +++++++++++++++++++
 arch/powerpc/kernel/pci_dn.c                 |  6 -----
 arch/powerpc/platforms/powernv/eeh-powernv.c | 33 ++++++++++++++--------------
 arch/powerpc/platforms/powernv/pci-ioda.c    |  6 +++--
 7 files changed, 54 insertions(+), 29 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 73b92017b6d7..20f68d36af8c 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -172,11 +172,18 @@ struct machdep_calls {
 	/* Called after scan and before resource survey */
 	void (*pcibios_fixup_phb)(struct pci_controller *hose);
 
+	/* Called after device has been added to bus and
+	 * before sysfs has been created
+	 */
+	void (*pcibios_bus_add_device)(struct pci_dev *pdev);
+
 	resource_size_t (*pcibios_default_alignment)(void);
 
 #ifdef CONFIG_PCI_IOV
 	void (*pcibios_fixup_sriov)(struct pci_dev *pdev);
 	resource_size_t (*pcibios_iov_resource_alignment)(struct pci_dev *, int resno);
+	int (*pcibios_sriov_enable)(struct pci_dev *pdev, u16 num_vfs);
+	int (*pcibios_sriov_disable)(struct pci_dev *pdev);
 #endif /* CONFIG_PCI_IOV */
 
 	/* Called to shutdown machine specific hardware not already controlled
diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
index 0b8aa1fe2d5f..323628ca4d6d 100644
--- a/arch/powerpc/include/asm/pci-bridge.h
+++ b/arch/powerpc/include/asm/pci-bridge.h
@@ -203,10 +203,9 @@ struct pci_dn {
 	struct eeh_dev *edev;		/* eeh device */
 #endif
 #define IODA_INVALID_PE		0xFFFFFFFF
-#ifdef CONFIG_PPC_POWERNV
 	unsigned int pe_number;
-	int     vf_index;		/* VF index in the PF */
 #ifdef CONFIG_PCI_IOV
+	int     vf_index;		/* VF index in the PF */
 	u16     vfs_expanded;		/* number of VFs IOV BAR expanded */
 	u16     num_vfs;		/* number of VFs enabled*/
 	unsigned int *pe_num_map;	/* PE# for the first VF PE or array */
@@ -215,7 +214,6 @@ struct pci_dn {
 	int     (*m64_map)[PCI_SRIOV_NUM_BARS];
 #endif /* CONFIG_PCI_IOV */
 	int	mps;			/* Maximum Payload Size */
-#endif
 	struct list_head child_list;
 	struct list_head list;
 };
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index 8b840191df59..f2d1b369974d 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -440,7 +440,7 @@ static void *eeh_add_virt_device(void *data, void *userdata)
 			return NULL;
 	}
 
-#ifdef CONFIG_PPC_POWERNV
+#ifdef CONFIG_PCI_IOV
 	pci_iov_add_virtfn(edev->physfn, pdn->vf_index, 0);
 #endif
 	return NULL;
@@ -496,7 +496,7 @@ static void *eeh_rmv_device(void *data, void *userdata)
 		(*removed)++;
 
 	if (edev->physfn) {
-#ifdef CONFIG_PPC_POWERNV
+#ifdef CONFIG_PCI_IOV
 		struct pci_dn *pdn = eeh_dev_to_pdn(edev);
 
 		pci_iov_remove_virtfn(edev->physfn, pdn->vf_index, 0);
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index 02831a396419..d45b956d2e3a 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -249,8 +249,31 @@ resource_size_t pcibios_iov_resource_alignment(struct pci_dev *pdev, int resno)
 
 	return pci_iov_resource_size(pdev, resno);
 }
+
+int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
+{
+	if (ppc_md.pcibios_sriov_enable)
+		return ppc_md.pcibios_sriov_enable(pdev, num_vfs);
+
+	return 0;
+}
+
+int pcibios_sriov_disable(struct pci_dev *pdev)
+{
+	if (ppc_md.pcibios_sriov_disable)
+		return ppc_md.pcibios_sriov_disable(pdev);
+
+	return 0;
+}
+
 #endif /* CONFIG_PCI_IOV */
 
+void pcibios_bus_add_device(struct pci_dev *pdev)
+{
+	if (ppc_md.pcibios_bus_add_device)
+		ppc_md.pcibios_bus_add_device(pdev);
+}
+
 static resource_size_t pcibios_io_size(const struct pci_controller *hose)
 {
 #ifdef CONFIG_PPC64
diff --git a/arch/powerpc/kernel/pci_dn.c b/arch/powerpc/kernel/pci_dn.c
index 0e395afbf0f4..ab147a1909c8 100644
--- a/arch/powerpc/kernel/pci_dn.c
+++ b/arch/powerpc/kernel/pci_dn.c
@@ -156,10 +156,8 @@ static struct pci_dn *add_one_dev_pci_data(struct pci_dn *parent,
 	pdn->parent = parent;
 	pdn->busno = busno;
 	pdn->devfn = devfn;
-#ifdef CONFIG_PPC_POWERNV
 	pdn->vf_index = vf_index;
 	pdn->pe_number = IODA_INVALID_PE;
-#endif
 	INIT_LIST_HEAD(&pdn->child_list);
 	INIT_LIST_HEAD(&pdn->list);
 	list_add_tail(&pdn->list, &parent->child_list);
@@ -226,9 +224,7 @@ void remove_dev_pci_data(struct pci_dev *pdev)
 	 */
 	if (pdev->is_virtfn) {
 		pdn = pci_get_pdn(pdev);
-#ifdef CONFIG_PPC_POWERNV
 		pdn->pe_number = IODA_INVALID_PE;
-#endif
 		return;
 	}
 
@@ -294,9 +290,7 @@ struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
 		return NULL;
 	dn->data = pdn;
 	pdn->phb = hose;
-#ifdef CONFIG_PPC_POWERNV
 	pdn->pe_number = IODA_INVALID_PE;
-#endif
 	regs = of_get_property(dn, "reg", NULL);
 	if (regs) {
 		u32 addr = of_read_number(regs, 1);
diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
index 8864065eba22..9de55bcf484a 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -44,6 +44,22 @@
 static bool pnv_eeh_nb_init = false;
 static int eeh_event_irq = -EINVAL;
 
+void pnv_pcibios_bus_add_device(struct pci_dev *pdev)
+{
+	struct pci_dn *pdn = pci_get_pdn(pdev);
+
+	if (!pdev->is_virtfn)
+		return;
+
+	/*
+	 * The following operations will fail if VF's sysfs files
+	 * aren't created or its resources aren't finalized.
+	 */
+	eeh_add_device_early(pdn);
+	eeh_add_device_late(pdev);
+	eeh_sysfs_add_device(pdev);
+}
+
 static int pnv_eeh_init(void)
 {
 	struct pci_controller *hose;
@@ -87,6 +103,7 @@ static int pnv_eeh_init(void)
 	}
 
 	eeh_set_pe_aux_size(max_diag_size);
+	ppc_md.pcibios_bus_add_device = pnv_pcibios_bus_add_device;
 
 	return 0;
 }
@@ -1747,22 +1764,6 @@ static struct eeh_ops pnv_eeh_ops = {
 	.restore_config		= pnv_eeh_restore_config
 };
 
-void pcibios_bus_add_device(struct pci_dev *pdev)
-{
-	struct pci_dn *pdn = pci_get_pdn(pdev);
-
-	if (!pdev->is_virtfn)
-		return;
-
-	/*
-	 * The following operations will fail if VF's sysfs files
-	 * aren't created or its resources aren't finalized.
-	 */
-	eeh_add_device_early(pdn);
-	eeh_add_device_late(pdev);
-	eeh_sysfs_add_device(pdev);
-}
-
 #ifdef CONFIG_PCI_IOV
 static void pnv_pci_fixup_vf_mps(struct pci_dev *pdev)
 {
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 57f9e55f4352..f7fed25e06ba 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1674,7 +1674,7 @@ int pnv_pci_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
 	return ret;
 }
 
-int pcibios_sriov_disable(struct pci_dev *pdev)
+int pnv_pcibios_sriov_disable(struct pci_dev *pdev)
 {
 	pnv_pci_sriov_disable(pdev);
 
@@ -1683,7 +1683,7 @@ int pcibios_sriov_disable(struct pci_dev *pdev)
 	return 0;
 }
 
-int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
+int pnv_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
 {
 	/* Allocate PCI data */
 	add_dev_pci_data(pdev);
@@ -4002,6 +4002,8 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
 #ifdef CONFIG_PCI_IOV
 	ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
 	ppc_md.pcibios_iov_resource_alignment = pnv_pci_iov_resource_alignment;
+	ppc_md.pcibios_sriov_enable = pnv_pcibios_sriov_enable;
+	ppc_md.pcibios_sriov_disable = pnv_pcibios_sriov_disable;
 #endif
 
 	pci_add_flags(PCI_REASSIGN_ALL_RSRC);
-- 
2.13.5 (Apple Git-94)

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v4 2/3] pseries: Add PSeries SR-IOV Machine dependent calls
  2017-10-31 14:47 [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
  2017-10-31 14:47 ` [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls Bryant G. Ly
@ 2017-10-31 14:47 ` Bryant G. Ly
  2017-10-31 14:52   ` Bryant G. Ly
  2017-10-31 14:47 ` [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally Bryant G. Ly
  2017-10-31 14:51 ` [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
  3 siblings, 1 reply; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:47 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, Bryant G. Ly, Juan J . Alvarez

Add calls for PSeries platform to configure/deconfigure
SR-IOV.

Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
Signed-off-by: Juan J. Alvarez <jjalvare@us.ibm.com>
---
 arch/powerpc/platforms/pseries/eeh_pseries.c | 24 +++++++++++++++++++++++
 arch/powerpc/platforms/pseries/pci.c         | 29 ++++++++++++++++++++++++----
 2 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
index 6b812ad990e4..2295f117e2d3 100644
--- a/arch/powerpc/platforms/pseries/eeh_pseries.c
+++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
@@ -55,6 +55,27 @@ static int ibm_get_config_addr_info;
 static int ibm_get_config_addr_info2;
 static int ibm_configure_pe;
 
+void pseries_pcibios_bus_add_device(struct pci_dev *pdev)
+{
+	struct pci_dn *pdn = pci_get_pdn(pdev);
+
+	if (!pdev->is_virtfn)
+		return;
+
+	pdn->device_id  =  pdev->device;
+	pdn->vendor_id  =  pdev->vendor;
+	pdn->class_code =  pdev->class;
+
+	/*
+	 * The following operations will fail if VF's sysfs files
+	 * aren't created or its resources aren't finalized.
+	 */
+	eeh_add_device_early(pdn);
+	eeh_add_device_late(pdev);
+	eeh_sysfs_add_device(pdev);
+
+}
+
 /*
  * Buffer for reporting slot-error-detail rtas calls. Its here
  * in BSS, and not dynamically alloced, so that it ends up in
@@ -120,6 +141,9 @@ static int pseries_eeh_init(void)
 	/* Set EEH probe mode */
 	eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
 
+	/* Set EEH machine dependent code */
+	ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device;
+
 	return 0;
 }
 
diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
index 09eba5a9929a..14a90cf471cc 100644
--- a/arch/powerpc/platforms/pseries/pci.c
+++ b/arch/powerpc/platforms/pseries/pci.c
@@ -3,17 +3,17 @@
  * Copyright (C) 2003 Anton Blanchard <anton@au.ibm.com>, IBM
  *
  * pSeries specific routines for PCI.
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- *    
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
@@ -54,10 +54,26 @@ void pcibios_name_device(struct pci_dev *dev)
 			}
 		}
 	}
-}   
+}
 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_name_device);
 #endif
 
+#ifdef CONFIG_PCI_IOV
+int pseries_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
+{
+	/* Allocate PCI data */
+	add_dev_pci_data(pdev);
+	return 0;
+}
+
+int pseries_pcibios_sriov_disable(struct pci_dev *pdev)
+{
+	/* Release PCI data */
+	remove_dev_pci_data(pdev);
+	return 0;
+}
+#endif
+
 static void __init pSeries_request_regions(void)
 {
 	if (!isa_io_base)
@@ -76,6 +92,11 @@ void __init pSeries_final_fixup(void)
 	pSeries_request_regions();
 
 	eeh_addr_cache_build();
+
+#ifdef CONFIG_PCI_IOV
+	ppc_md.pcibios_sriov_enable = pseries_pcibios_sriov_enable;
+	ppc_md.pcibios_sriov_disable = pseries_pcibios_sriov_disable;
+#endif
 }
 
 /*
-- 
2.13.5 (Apple Git-94)

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally
  2017-10-31 14:47 [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
  2017-10-31 14:47 ` [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls Bryant G. Ly
  2017-10-31 14:47 ` [PATCH v4 2/3] pseries: Add PSeries SR-IOV Machine dependent calls Bryant G. Ly
@ 2017-10-31 14:47 ` Bryant G. Ly
  2017-10-31 14:52   ` Bryant G. Ly
  2017-11-08 23:05   ` Bjorn Helgaas
  2017-10-31 14:51 ` [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
  3 siblings, 2 replies; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:47 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, Bryant G. Ly

When SR-IOV is supported in pci_dev struct the
member variable drivers_autoprobe controls the
VF drivers auto probe functionality. This
patch exposes a gloabal function to be used
if needed when configuring the pci_dev sriov object.

Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
Signed-off-by: Juan J. Alvarez <jjalvare@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/pseries/pci.c |  2 ++
 drivers/pci/iov.c                    | 12 ++++++++++++
 include/linux/pci.h                  |  2 ++
 3 files changed, 16 insertions(+)

diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
index 14a90cf471cc..48d3af026f90 100644
--- a/arch/powerpc/platforms/pseries/pci.c
+++ b/arch/powerpc/platforms/pseries/pci.c
@@ -63,6 +63,7 @@ int pseries_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
 {
 	/* Allocate PCI data */
 	add_dev_pci_data(pdev);
+	pci_vf_drivers_autoprobe(pdev, false);
 	return 0;
 }
 
@@ -70,6 +71,7 @@ int pseries_pcibios_sriov_disable(struct pci_dev *pdev)
 {
 	/* Release PCI data */
 	remove_dev_pci_data(pdev);
+	pci_vf_drivers_autoprobe(pdev, true);
 	return 0;
 }
 #endif
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index ac41c8be9200..41465c06975c 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -634,6 +634,18 @@ void pci_restore_iov_state(struct pci_dev *dev)
 }
 
 /**
+ * pci_vf_drivers_autoprobe - set pf property drivers_autoprobe for vfs
+ * @dev: the PCI device
+ * @auto_probe: set vf drivers auto probe flag
+ */
+void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
+{
+	if (dev->is_physfn)
+		dev->sriov->drivers_autoprobe = auto_probe;
+}
+EXPORT_SYMBOL_GPL(pci_vf_drivers_autoprobe);
+
+/**
  * pci_iov_bus_range - find bus range used by Virtual Function
  * @bus: the PCI bus
  *
diff --git a/include/linux/pci.h b/include/linux/pci.h
index f4f8ee5a7362..17a08554baa2 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1965,6 +1965,7 @@ int pci_vfs_assigned(struct pci_dev *dev);
 int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
 int pci_sriov_get_totalvfs(struct pci_dev *dev);
 resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno);
+void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe);
 #else
 static inline int pci_iov_virtfn_bus(struct pci_dev *dev, int id)
 {
@@ -1992,6 +1993,7 @@ static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
 { return 0; }
 static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
 { return 0; }
+static inline void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe) { }
 #endif
 
 #if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
-- 
2.13.5 (Apple Git-94)

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement
  2017-10-31 14:47 [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
                   ` (2 preceding siblings ...)
  2017-10-31 14:47 ` [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally Bryant G. Ly
@ 2017-10-31 14:51 ` Bryant G. Ly
  3 siblings, 0 replies; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:51 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, linuxppc-dev

Add linuxppc-dev@lists.ozlabs.org


On 10/31/17 9:47 AM, Bryant G. Ly wrote:
> v1 - Initial patch
> v2 - Addressed Bjorn's comment on creating a highly platform
>      dependent global exported symbol.
> v3 - Based patch off linux-ppc/master
> v4 - Using the sriov-drivers_autoprobe mechanism per Bjorn's request
>
> Bryant G. Ly (3):
>   powerpc/kernel: Separate SR-IOV Calls
>   pseries: Add PSeries SR-IOV Machine dependent calls
>   pci/iov: Expose VF drivers Auto Probe Globally
>
>  arch/powerpc/include/asm/machdep.h           |  7 ++++++
>  arch/powerpc/include/asm/pci-bridge.h        |  4 +---
>  arch/powerpc/kernel/eeh_driver.c             |  4 ++--
>  arch/powerpc/kernel/pci-common.c             | 23 +++++++++++++++++++
>  arch/powerpc/kernel/pci_dn.c                 |  6 -----
>  arch/powerpc/platforms/powernv/eeh-powernv.c | 33 ++++++++++++++--------------
>  arch/powerpc/platforms/powernv/pci-ioda.c    |  6 +++--
>  arch/powerpc/platforms/pseries/eeh_pseries.c | 24 ++++++++++++++++++++
>  arch/powerpc/platforms/pseries/pci.c         | 31 ++++++++++++++++++++++----
>  drivers/pci/iov.c                            | 12 ++++++++++
>  include/linux/pci.h                          |  2 ++
>  11 files changed, 119 insertions(+), 33 deletions(-)
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls
  2017-10-31 14:47 ` [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls Bryant G. Ly
@ 2017-10-31 14:52   ` Bryant G. Ly
  0 siblings, 0 replies; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:52 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, Juan J . Alvarez, linuxppc-dev

Add linuxppc-dev@lists.ozlabs.org

On 10/31/17 9:47 AM, Bryant G. Ly wrote:

> SR-IOV can now be enabled in PowerNV platforms and Pseries
> platforms. Therefore, the appropriate calls were moved to
> machine dependent code instead of definition at compile time.
>
> Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
> Signed-off-by: Juan J. Alvarez <jjalvare@us.ibm.com>
> ---
>  arch/powerpc/include/asm/machdep.h           |  7 ++++++
>  arch/powerpc/include/asm/pci-bridge.h        |  4 +---
>  arch/powerpc/kernel/eeh_driver.c             |  4 ++--
>  arch/powerpc/kernel/pci-common.c             | 23 +++++++++++++++++++
>  arch/powerpc/kernel/pci_dn.c                 |  6 -----
>  arch/powerpc/platforms/powernv/eeh-powernv.c | 33 ++++++++++++++--------------
>  arch/powerpc/platforms/powernv/pci-ioda.c    |  6 +++--
>  7 files changed, 54 insertions(+), 29 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
> index 73b92017b6d7..20f68d36af8c 100644
> --- a/arch/powerpc/include/asm/machdep.h
> +++ b/arch/powerpc/include/asm/machdep.h
> @@ -172,11 +172,18 @@ struct machdep_calls {
>  	/* Called after scan and before resource survey */
>  	void (*pcibios_fixup_phb)(struct pci_controller *hose);
>
> +	/* Called after device has been added to bus and
> +	 * before sysfs has been created
> +	 */
> +	void (*pcibios_bus_add_device)(struct pci_dev *pdev);
> +
>  	resource_size_t (*pcibios_default_alignment)(void);
>
>  #ifdef CONFIG_PCI_IOV
>  	void (*pcibios_fixup_sriov)(struct pci_dev *pdev);
>  	resource_size_t (*pcibios_iov_resource_alignment)(struct pci_dev *, int resno);
> +	int (*pcibios_sriov_enable)(struct pci_dev *pdev, u16 num_vfs);
> +	int (*pcibios_sriov_disable)(struct pci_dev *pdev);
>  #endif /* CONFIG_PCI_IOV */
>
>  	/* Called to shutdown machine specific hardware not already controlled
> diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
> index 0b8aa1fe2d5f..323628ca4d6d 100644
> --- a/arch/powerpc/include/asm/pci-bridge.h
> +++ b/arch/powerpc/include/asm/pci-bridge.h
> @@ -203,10 +203,9 @@ struct pci_dn {
>  	struct eeh_dev *edev;		/* eeh device */
>  #endif
>  #define IODA_INVALID_PE		0xFFFFFFFF
> -#ifdef CONFIG_PPC_POWERNV
>  	unsigned int pe_number;
> -	int     vf_index;		/* VF index in the PF */
>  #ifdef CONFIG_PCI_IOV
> +	int     vf_index;		/* VF index in the PF */
>  	u16     vfs_expanded;		/* number of VFs IOV BAR expanded */
>  	u16     num_vfs;		/* number of VFs enabled*/
>  	unsigned int *pe_num_map;	/* PE# for the first VF PE or array */
> @@ -215,7 +214,6 @@ struct pci_dn {
>  	int     (*m64_map)[PCI_SRIOV_NUM_BARS];
>  #endif /* CONFIG_PCI_IOV */
>  	int	mps;			/* Maximum Payload Size */
> -#endif
>  	struct list_head child_list;
>  	struct list_head list;
>  };
> diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
> index 8b840191df59..f2d1b369974d 100644
> --- a/arch/powerpc/kernel/eeh_driver.c
> +++ b/arch/powerpc/kernel/eeh_driver.c
> @@ -440,7 +440,7 @@ static void *eeh_add_virt_device(void *data, void *userdata)
>  			return NULL;
>  	}
>
> -#ifdef CONFIG_PPC_POWERNV
> +#ifdef CONFIG_PCI_IOV
>  	pci_iov_add_virtfn(edev->physfn, pdn->vf_index, 0);
>  #endif
>  	return NULL;
> @@ -496,7 +496,7 @@ static void *eeh_rmv_device(void *data, void *userdata)
>  		(*removed)++;
>
>  	if (edev->physfn) {
> -#ifdef CONFIG_PPC_POWERNV
> +#ifdef CONFIG_PCI_IOV
>  		struct pci_dn *pdn = eeh_dev_to_pdn(edev);
>
>  		pci_iov_remove_virtfn(edev->physfn, pdn->vf_index, 0);
> diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
> index 02831a396419..d45b956d2e3a 100644
> --- a/arch/powerpc/kernel/pci-common.c
> +++ b/arch/powerpc/kernel/pci-common.c
> @@ -249,8 +249,31 @@ resource_size_t pcibios_iov_resource_alignment(struct pci_dev *pdev, int resno)
>
>  	return pci_iov_resource_size(pdev, resno);
>  }
> +
> +int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
> +{
> +	if (ppc_md.pcibios_sriov_enable)
> +		return ppc_md.pcibios_sriov_enable(pdev, num_vfs);
> +
> +	return 0;
> +}
> +
> +int pcibios_sriov_disable(struct pci_dev *pdev)
> +{
> +	if (ppc_md.pcibios_sriov_disable)
> +		return ppc_md.pcibios_sriov_disable(pdev);
> +
> +	return 0;
> +}
> +
>  #endif /* CONFIG_PCI_IOV */
>
> +void pcibios_bus_add_device(struct pci_dev *pdev)
> +{
> +	if (ppc_md.pcibios_bus_add_device)
> +		ppc_md.pcibios_bus_add_device(pdev);
> +}
> +
>  static resource_size_t pcibios_io_size(const struct pci_controller *hose)
>  {
>  #ifdef CONFIG_PPC64
> diff --git a/arch/powerpc/kernel/pci_dn.c b/arch/powerpc/kernel/pci_dn.c
> index 0e395afbf0f4..ab147a1909c8 100644
> --- a/arch/powerpc/kernel/pci_dn.c
> +++ b/arch/powerpc/kernel/pci_dn.c
> @@ -156,10 +156,8 @@ static struct pci_dn *add_one_dev_pci_data(struct pci_dn *parent,
>  	pdn->parent = parent;
>  	pdn->busno = busno;
>  	pdn->devfn = devfn;
> -#ifdef CONFIG_PPC_POWERNV
>  	pdn->vf_index = vf_index;
>  	pdn->pe_number = IODA_INVALID_PE;
> -#endif
>  	INIT_LIST_HEAD(&pdn->child_list);
>  	INIT_LIST_HEAD(&pdn->list);
>  	list_add_tail(&pdn->list, &parent->child_list);
> @@ -226,9 +224,7 @@ void remove_dev_pci_data(struct pci_dev *pdev)
>  	 */
>  	if (pdev->is_virtfn) {
>  		pdn = pci_get_pdn(pdev);
> -#ifdef CONFIG_PPC_POWERNV
>  		pdn->pe_number = IODA_INVALID_PE;
> -#endif
>  		return;
>  	}
>
> @@ -294,9 +290,7 @@ struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
>  		return NULL;
>  	dn->data = pdn;
>  	pdn->phb = hose;
> -#ifdef CONFIG_PPC_POWERNV
>  	pdn->pe_number = IODA_INVALID_PE;
> -#endif
>  	regs = of_get_property(dn, "reg", NULL);
>  	if (regs) {
>  		u32 addr = of_read_number(regs, 1);
> diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
> index 8864065eba22..9de55bcf484a 100644
> --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
> +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
> @@ -44,6 +44,22 @@
>  static bool pnv_eeh_nb_init = false;
>  static int eeh_event_irq = -EINVAL;
>
> +void pnv_pcibios_bus_add_device(struct pci_dev *pdev)
> +{
> +	struct pci_dn *pdn = pci_get_pdn(pdev);
> +
> +	if (!pdev->is_virtfn)
> +		return;
> +
> +	/*
> +	 * The following operations will fail if VF's sysfs files
> +	 * aren't created or its resources aren't finalized.
> +	 */
> +	eeh_add_device_early(pdn);
> +	eeh_add_device_late(pdev);
> +	eeh_sysfs_add_device(pdev);
> +}
> +
>  static int pnv_eeh_init(void)
>  {
>  	struct pci_controller *hose;
> @@ -87,6 +103,7 @@ static int pnv_eeh_init(void)
>  	}
>
>  	eeh_set_pe_aux_size(max_diag_size);
> +	ppc_md.pcibios_bus_add_device = pnv_pcibios_bus_add_device;
>
>  	return 0;
>  }
> @@ -1747,22 +1764,6 @@ static struct eeh_ops pnv_eeh_ops = {
>  	.restore_config		= pnv_eeh_restore_config
>  };
>
> -void pcibios_bus_add_device(struct pci_dev *pdev)
> -{
> -	struct pci_dn *pdn = pci_get_pdn(pdev);
> -
> -	if (!pdev->is_virtfn)
> -		return;
> -
> -	/*
> -	 * The following operations will fail if VF's sysfs files
> -	 * aren't created or its resources aren't finalized.
> -	 */
> -	eeh_add_device_early(pdn);
> -	eeh_add_device_late(pdev);
> -	eeh_sysfs_add_device(pdev);
> -}
> -
>  #ifdef CONFIG_PCI_IOV
>  static void pnv_pci_fixup_vf_mps(struct pci_dev *pdev)
>  {
> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
> index 57f9e55f4352..f7fed25e06ba 100644
> --- a/arch/powerpc/platforms/powernv/pci-ioda.c
> +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
> @@ -1674,7 +1674,7 @@ int pnv_pci_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
>  	return ret;
>  }
>
> -int pcibios_sriov_disable(struct pci_dev *pdev)
> +int pnv_pcibios_sriov_disable(struct pci_dev *pdev)
>  {
>  	pnv_pci_sriov_disable(pdev);
>
> @@ -1683,7 +1683,7 @@ int pcibios_sriov_disable(struct pci_dev *pdev)
>  	return 0;
>  }
>
> -int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
> +int pnv_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
>  {
>  	/* Allocate PCI data */
>  	add_dev_pci_data(pdev);
> @@ -4002,6 +4002,8 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
>  #ifdef CONFIG_PCI_IOV
>  	ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
>  	ppc_md.pcibios_iov_resource_alignment = pnv_pci_iov_resource_alignment;
> +	ppc_md.pcibios_sriov_enable = pnv_pcibios_sriov_enable;
> +	ppc_md.pcibios_sriov_disable = pnv_pcibios_sriov_disable;
>  #endif
>
>  	pci_add_flags(PCI_REASSIGN_ALL_RSRC);

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 2/3] pseries: Add PSeries SR-IOV Machine dependent calls
  2017-10-31 14:47 ` [PATCH v4 2/3] pseries: Add PSeries SR-IOV Machine dependent calls Bryant G. Ly
@ 2017-10-31 14:52   ` Bryant G. Ly
  0 siblings, 0 replies; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:52 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, Juan J . Alvarez, linuxppc-dev

Add linuxppc-dev@lists.ozlabs.org

On 10/31/17 9:47 AM, Bryant G. Ly wrote:

> Add calls for PSeries platform to configure/deconfigure
> SR-IOV.
>
> Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
> Signed-off-by: Juan J. Alvarez <jjalvare@us.ibm.com>
> ---
>  arch/powerpc/platforms/pseries/eeh_pseries.c | 24 +++++++++++++++++++++++
>  arch/powerpc/platforms/pseries/pci.c         | 29 ++++++++++++++++++++++++----
>  2 files changed, 49 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
> index 6b812ad990e4..2295f117e2d3 100644
> --- a/arch/powerpc/platforms/pseries/eeh_pseries.c
> +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
> @@ -55,6 +55,27 @@ static int ibm_get_config_addr_info;
>  static int ibm_get_config_addr_info2;
>  static int ibm_configure_pe;
>
> +void pseries_pcibios_bus_add_device(struct pci_dev *pdev)
> +{
> +	struct pci_dn *pdn = pci_get_pdn(pdev);
> +
> +	if (!pdev->is_virtfn)
> +		return;
> +
> +	pdn->device_id  =  pdev->device;
> +	pdn->vendor_id  =  pdev->vendor;
> +	pdn->class_code =  pdev->class;
> +
> +	/*
> +	 * The following operations will fail if VF's sysfs files
> +	 * aren't created or its resources aren't finalized.
> +	 */
> +	eeh_add_device_early(pdn);
> +	eeh_add_device_late(pdev);
> +	eeh_sysfs_add_device(pdev);
> +
> +}
> +
>  /*
>   * Buffer for reporting slot-error-detail rtas calls. Its here
>   * in BSS, and not dynamically alloced, so that it ends up in
> @@ -120,6 +141,9 @@ static int pseries_eeh_init(void)
>  	/* Set EEH probe mode */
>  	eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
>
> +	/* Set EEH machine dependent code */
> +	ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device;
> +
>  	return 0;
>  }
>
> diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
> index 09eba5a9929a..14a90cf471cc 100644
> --- a/arch/powerpc/platforms/pseries/pci.c
> +++ b/arch/powerpc/platforms/pseries/pci.c
> @@ -3,17 +3,17 @@
>   * Copyright (C) 2003 Anton Blanchard <anton@au.ibm.com>, IBM
>   *
>   * pSeries specific routines for PCI.
> - * 
> + *
>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License as published by
>   * the Free Software Foundation; either version 2 of the License, or
>   * (at your option) any later version.
> - *    
> + *
>   * This program is distributed in the hope that it will be useful,
>   * but WITHOUT ANY WARRANTY; without even the implied warranty of
>   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>   * GNU General Public License for more details.
> - * 
> + *
>   * You should have received a copy of the GNU General Public License
>   * along with this program; if not, write to the Free Software
>   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
> @@ -54,10 +54,26 @@ void pcibios_name_device(struct pci_dev *dev)
>  			}
>  		}
>  	}
> -}   
> +}
>  DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_name_device);
>  #endif
>
> +#ifdef CONFIG_PCI_IOV
> +int pseries_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
> +{
> +	/* Allocate PCI data */
> +	add_dev_pci_data(pdev);
> +	return 0;
> +}
> +
> +int pseries_pcibios_sriov_disable(struct pci_dev *pdev)
> +{
> +	/* Release PCI data */
> +	remove_dev_pci_data(pdev);
> +	return 0;
> +}
> +#endif
> +
>  static void __init pSeries_request_regions(void)
>  {
>  	if (!isa_io_base)
> @@ -76,6 +92,11 @@ void __init pSeries_final_fixup(void)
>  	pSeries_request_regions();
>
>  	eeh_addr_cache_build();
> +
> +#ifdef CONFIG_PCI_IOV
> +	ppc_md.pcibios_sriov_enable = pseries_pcibios_sriov_enable;
> +	ppc_md.pcibios_sriov_disable = pseries_pcibios_sriov_disable;
> +#endif
>  }
>
>  /*

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally
  2017-10-31 14:47 ` [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally Bryant G. Ly
@ 2017-10-31 14:52   ` Bryant G. Ly
  2017-11-08 23:05   ` Bjorn Helgaas
  1 sibling, 0 replies; 10+ messages in thread
From: Bryant G. Ly @ 2017-10-31 14:52 UTC (permalink / raw)
  To: helgaas, bhelgaas, benh, paulus, mpe
  Cc: seroyer, jjalvare, alex.williamson, linux-pci, linuxppc-devel,
	bodong, eli, saeedm, linuxppc-dev

Add linuxppc-dev@lists.ozlabs.org

On 10/31/17 9:47 AM, Bryant G. Ly wrote:

> When SR-IOV is supported in pci_dev struct the
> member variable drivers_autoprobe controls the
> VF drivers auto probe functionality. This
> patch exposes a gloabal function to be used
> if needed when configuring the pci_dev sriov object.
>
> Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
> Signed-off-by: Juan J. Alvarez <jjalvare@linux.vnet.ibm.com>
> ---
>  arch/powerpc/platforms/pseries/pci.c |  2 ++
>  drivers/pci/iov.c                    | 12 ++++++++++++
>  include/linux/pci.h                  |  2 ++
>  3 files changed, 16 insertions(+)
>
> diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
> index 14a90cf471cc..48d3af026f90 100644
> --- a/arch/powerpc/platforms/pseries/pci.c
> +++ b/arch/powerpc/platforms/pseries/pci.c
> @@ -63,6 +63,7 @@ int pseries_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
>  {
>  	/* Allocate PCI data */
>  	add_dev_pci_data(pdev);
> +	pci_vf_drivers_autoprobe(pdev, false);
>  	return 0;
>  }
>
> @@ -70,6 +71,7 @@ int pseries_pcibios_sriov_disable(struct pci_dev *pdev)
>  {
>  	/* Release PCI data */
>  	remove_dev_pci_data(pdev);
> +	pci_vf_drivers_autoprobe(pdev, true);
>  	return 0;
>  }
>  #endif
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index ac41c8be9200..41465c06975c 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -634,6 +634,18 @@ void pci_restore_iov_state(struct pci_dev *dev)
>  }
>
>  /**
> + * pci_vf_drivers_autoprobe - set pf property drivers_autoprobe for vfs
> + * @dev: the PCI device
> + * @auto_probe: set vf drivers auto probe flag
> + */
> +void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
> +{
> +	if (dev->is_physfn)
> +		dev->sriov->drivers_autoprobe = auto_probe;
> +}
> +EXPORT_SYMBOL_GPL(pci_vf_drivers_autoprobe);
> +
> +/**
>   * pci_iov_bus_range - find bus range used by Virtual Function
>   * @bus: the PCI bus
>   *
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index f4f8ee5a7362..17a08554baa2 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1965,6 +1965,7 @@ int pci_vfs_assigned(struct pci_dev *dev);
>  int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
>  int pci_sriov_get_totalvfs(struct pci_dev *dev);
>  resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno);
> +void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe);
>  #else
>  static inline int pci_iov_virtfn_bus(struct pci_dev *dev, int id)
>  {
> @@ -1992,6 +1993,7 @@ static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
>  { return 0; }
>  static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
>  { return 0; }
> +static inline void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe) { }
>  #endif
>
>  #if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally
  2017-10-31 14:47 ` [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally Bryant G. Ly
  2017-10-31 14:52   ` Bryant G. Ly
@ 2017-11-08 23:05   ` Bjorn Helgaas
  2017-11-09  0:20     ` Michael Ellerman
  1 sibling, 1 reply; 10+ messages in thread
From: Bjorn Helgaas @ 2017-11-08 23:05 UTC (permalink / raw)
  To: Bryant G. Ly
  Cc: bhelgaas, benh, paulus, mpe, seroyer, jjalvare, alex.williamson,
	linux-pci, linuxppc-devel, bodong, eli, saeedm

Please update the subject line from

  pci/iov: Expose VF drivers Auto Probe Globally

to

  PCI/IOV: Add pci_vf_drivers_autoprobe() interface

so it matches the other changelogs (most of the previous iov.c changes
use just "PCI:", but I think it makes sense to use "PCI/IOV:"
similarly to "PCI/MSI:").

On Tue, Oct 31, 2017 at 09:47:24AM -0500, Bryant G. Ly wrote:
> When SR-IOV is supported in pci_dev struct the
> member variable drivers_autoprobe controls the
> VF drivers auto probe functionality. This
> patch exposes a gloabal function to be used
> if needed when configuring the pci_dev sriov object.

And change the changelog to:

  Add a pci_vf_drivers_autoprobe() interface.  Setting autoprobe to false
  on the PF prevents drivers from binding to VFs when they are enabled.

> Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
> Signed-off-by: Juan J. Alvarez <jjalvare@linux.vnet.ibm.com>
> ---
>  arch/powerpc/platforms/pseries/pci.c |  2 ++
>  drivers/pci/iov.c                    | 12 ++++++++++++
>  include/linux/pci.h                  |  2 ++
>  3 files changed, 16 insertions(+)
> 
> diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
> index 14a90cf471cc..48d3af026f90 100644
> --- a/arch/powerpc/platforms/pseries/pci.c
> +++ b/arch/powerpc/platforms/pseries/pci.c
> @@ -63,6 +63,7 @@ int pseries_pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
>  {
>  	/* Allocate PCI data */
>  	add_dev_pci_data(pdev);
> +	pci_vf_drivers_autoprobe(pdev, false);
>  	return 0;
>  }
>  
> @@ -70,6 +71,7 @@ int pseries_pcibios_sriov_disable(struct pci_dev *pdev)
>  {
>  	/* Release PCI data */
>  	remove_dev_pci_data(pdev);
> +	pci_vf_drivers_autoprobe(pdev, true);
>  	return 0;
>  }
>  #endif
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index ac41c8be9200..41465c06975c 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -634,6 +634,18 @@ void pci_restore_iov_state(struct pci_dev *dev)
>  }
>  
>  /**
> + * pci_vf_drivers_autoprobe - set pf property drivers_autoprobe for vfs
> + * @dev: the PCI device
> + * @auto_probe: set vf drivers auto probe flag

In the text (not the function name),

s/pf/PF/
s/for vfs//
s/vf/VF/

> + */
> +void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
> +{
> +	if (dev->is_physfn)
> +		dev->sriov->drivers_autoprobe = auto_probe;
> +}
> +EXPORT_SYMBOL_GPL(pci_vf_drivers_autoprobe);

I don't think this needs to be exported.  It's only called from arch
code that cannot be a module.

With these changes,

Acked-by: Bjorn Helgaas <bhelgaas@google.com>

I assume you'll merge these via the powerpc tree.  Let me know if you
need anything else from me.

> +/**
>   * pci_iov_bus_range - find bus range used by Virtual Function
>   * @bus: the PCI bus
>   *
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index f4f8ee5a7362..17a08554baa2 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1965,6 +1965,7 @@ int pci_vfs_assigned(struct pci_dev *dev);
>  int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
>  int pci_sriov_get_totalvfs(struct pci_dev *dev);
>  resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno);
> +void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe);
>  #else
>  static inline int pci_iov_virtfn_bus(struct pci_dev *dev, int id)
>  {
> @@ -1992,6 +1993,7 @@ static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
>  { return 0; }
>  static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
>  { return 0; }
> +static inline void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe) { }
>  #endif
>  
>  #if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
> -- 
> 2.13.5 (Apple Git-94)
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally
  2017-11-08 23:05   ` Bjorn Helgaas
@ 2017-11-09  0:20     ` Michael Ellerman
  0 siblings, 0 replies; 10+ messages in thread
From: Michael Ellerman @ 2017-11-09  0:20 UTC (permalink / raw)
  To: Bjorn Helgaas, Bryant G. Ly
  Cc: bhelgaas, benh, paulus, seroyer, jjalvare, alex.williamson,
	linux-pci, linuxppc-dev, bodong, eli, saeedm

Bjorn Helgaas <helgaas@kernel.org> writes:
> Please update the subject line from
>
>   pci/iov: Expose VF drivers Auto Probe Globally
>
> to
>
>   PCI/IOV: Add pci_vf_drivers_autoprobe() interface
...
>
>> + */
>> +void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
>> +{
>> +	if (dev->is_physfn)
>> +		dev->sriov->drivers_autoprobe = auto_probe;
>> +}
>> +EXPORT_SYMBOL_GPL(pci_vf_drivers_autoprobe);
>
> I don't think this needs to be exported.  It's only called from arch
> code that cannot be a module.
>
> With these changes,
>
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
>
> I assume you'll merge these via the powerpc tree.  Let me know if you
> need anything else from me.

Thanks.

Actually I'd basically missed this series because it wasn't properly
cc'ed to linuxppc-dev, so it doesn't appear in patchwork.

Bryant, please incorporate Bjorn's review comments and resend a v5 to
linuxppc-dev. Thanks.

It should show up here for me to see it:
  http://patchwork.ozlabs.org/project/linuxppc-dev/list/?submitter=72247

cheers

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-11-09  0:20 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-31 14:47 [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly
2017-10-31 14:47 ` [PATCH v4 1/3] powerpc/kernel: Separate SR-IOV Calls Bryant G. Ly
2017-10-31 14:52   ` Bryant G. Ly
2017-10-31 14:47 ` [PATCH v4 2/3] pseries: Add PSeries SR-IOV Machine dependent calls Bryant G. Ly
2017-10-31 14:52   ` Bryant G. Ly
2017-10-31 14:47 ` [PATCH v4 3/3] pci/iov: Expose VF drivers Auto Probe Globally Bryant G. Ly
2017-10-31 14:52   ` Bryant G. Ly
2017-11-08 23:05   ` Bjorn Helgaas
2017-11-09  0:20     ` Michael Ellerman
2017-10-31 14:51 ` [PATCH v4 0/3] Prepartion for SR-IOV PowerVM Enablement Bryant G. Ly

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).