diff options
author | Alexander Duyck | 2015-10-29 16:21:05 -0500 |
---|---|---|
committer | Bjorn Helgaas | 2015-10-30 15:14:00 -0500 |
commit | 3443c38205330bc5783a516ef1d0b6f182ee9a85 (patch) | |
tree | 7cf2f33097b52949218d1d5c6292938695394f97 /drivers/pci | |
parent | ce288ec380380f3ab0e3c631b9c2f598835a3f38 (diff) |
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')
-rw-r--r-- | drivers/pci/iov.c | 6 |
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); |