[PATCH V5 01/10] pci/iov: rename and export virtfn_add/virtfn_remove
From: Wei Yang <hidden>
Date: 2015-05-15 13:38:35
Also in:
linux-pci
Subsystem:
pci subsystem, the rest · Maintainers:
Bjorn Helgaas, Linus Torvalds
During the EEH recovery, when a device's driver is not EEH aware or no driver is bound with a device, EEH core would do hotplug on this device. While it isn't feasible for a VF with usual hotplug procedure. During removal of a VF, virtual bus should be removed if necessary. During the re-creation, the pci_scan_slot() doesn't work on a VF. This patch exports two functions to handle the hotplug case for VF properly. They will be invoked when the EEH core does the hotplug case for VFs. Signed-off-by: Wei Yang <redacted> Reviewed-by: Gavin Shan <redacted> --- drivers/pci/iov.c | 10 +++++----- include/linux/pci.h | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 47daf2f..f353e6f 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c@@ -106,7 +106,7 @@ resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno) return dev->sriov->barsz[resno - PCI_IOV_RESOURCES]; } -static int virtfn_add(struct pci_dev *dev, int id, int reset) +int pci_iov_virtfn_add(struct pci_dev *dev, int id, int reset) { int i; int rc = -ENOMEM;
@@ -181,7 +181,7 @@ failed: return rc; } -static void virtfn_remove(struct pci_dev *dev, int id, int reset) +void pci_iov_virtfn_remove(struct pci_dev *dev, int id, int reset) { struct pci_dev *virtfn;
@@ -302,7 +302,7 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn) } for (i = 0; i < initial; i++) { - rc = virtfn_add(dev, i, 0); + rc = pci_iov_virtfn_add(dev, i, 0); if (rc) goto failed; }
@@ -314,7 +314,7 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn) failed: for (j = 0; j < i; j++) - virtfn_remove(dev, j, 0); + pci_iov_virtfn_remove(dev, j, 0); iov->ctrl &= ~(PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE); pci_cfg_access_lock(dev);
@@ -343,7 +343,7 @@ static void sriov_disable(struct pci_dev *dev) return; for (i = 0; i < iov->num_VFs; i++) - virtfn_remove(dev, i, 0); + pci_iov_virtfn_remove(dev, i, 0); pcibios_sriov_disable(dev);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 353db8d..94bacfa 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h@@ -1679,6 +1679,8 @@ int pci_iov_virtfn_devfn(struct pci_dev *dev, int id); int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn); void pci_disable_sriov(struct pci_dev *dev); +int pci_iov_virtfn_add(struct pci_dev *dev, int id, int reset); +void pci_iov_virtfn_remove(struct pci_dev *dev, int id, int reset); int pci_num_vf(struct pci_dev *dev); int pci_vfs_assigned(struct pci_dev *dev); int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
--
1.7.9.5