summaryrefslogtreecommitdiffstats
path: root/drivers/pci/iov.c
diff options
context:
space:
mode:
authorAlexander Duyck <aduyck@mirantis.com>2015-10-29 22:21:05 +0100
committerBjorn Helgaas <bhelgaas@google.com>2015-10-30 21:14:00 +0100
commit3443c38205330bc5783a516ef1d0b6f182ee9a85 (patch)
tree7cf2f33097b52949218d1d5c6292938695394f97 /drivers/pci/iov.c
parentPCI: Remove redundant validation of SR-IOV offset/stride registers (diff)
downloadlinux-3443c38205330bc5783a516ef1d0b6f182ee9a85.tar.xz
linux-3443c38205330bc5783a516ef1d0b6f182ee9a85.zip
PCI: Remove VFs in reverse order if virtfn_add() fails
If virtfn_add() fails, we call virtfn_remove() for any previously added devices. Remove the devices in reverse order (first-added is last-removed), which is more natural and doesn't require an additional variable. [bhelgaas: changelog, split to separate patch for reviewability] Signed-off-by: Alexander Duyck <aduyck@mirantis.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Wei Yang <weiyang@linux.vnet.ibm.com>
Diffstat (limited to 'drivers/pci/iov.c')
-rw-r--r--drivers/pci/iov.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index ca400a9140de..c86d94c0c7a4 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -233,7 +233,7 @@ int __weak pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
{
int rc;
- int i, j;
+ int i;
int nres;
u16 initial;
struct resource *res;
@@ -328,8 +328,8 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
return 0;
failed:
- for (j = 0; j < i; j++)
- virtfn_remove(dev, j, 0);
+ while (i--)
+ virtfn_remove(dev, i, 0);
iov->ctrl &= ~(PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE);
pci_cfg_access_lock(dev);