]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
PCI: Remove VFs in reverse order if virtfn_add() fails
authorAlexander Duyck <aduyck@mirantis.com>
Thu, 29 Oct 2015 21:21:05 +0000 (16:21 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 30 Oct 2015 20:14:00 +0000 (15:14 -0500)
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>
drivers/pci/iov.c

index ca400a9140de197249dfea5cadf48fd411c36496..c86d94c0c7a491aef2ae0c135ecf6db2392c93ff 100644 (file)
@@ -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);