|
@@ -98,21 +98,20 @@ static int nfp_pcie_sriov_enable(struct pci_dev *pdev, int num_vfs)
|
|
|
struct nfp_pf *pf = pci_get_drvdata(pdev);
|
|
struct nfp_pf *pf = pci_get_drvdata(pdev);
|
|
|
int err;
|
|
int err;
|
|
|
|
|
|
|
|
- mutex_lock(&pf->lock);
|
|
|
|
|
-
|
|
|
|
|
if (num_vfs > pf->limit_vfs) {
|
|
if (num_vfs > pf->limit_vfs) {
|
|
|
nfp_info(pf->cpp, "Firmware limits number of VFs to %u\n",
|
|
nfp_info(pf->cpp, "Firmware limits number of VFs to %u\n",
|
|
|
pf->limit_vfs);
|
|
pf->limit_vfs);
|
|
|
- err = -EINVAL;
|
|
|
|
|
- goto err_unlock;
|
|
|
|
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
err = pci_enable_sriov(pdev, num_vfs);
|
|
err = pci_enable_sriov(pdev, num_vfs);
|
|
|
if (err) {
|
|
if (err) {
|
|
|
dev_warn(&pdev->dev, "Failed to enable PCI SR-IOV: %d\n", err);
|
|
dev_warn(&pdev->dev, "Failed to enable PCI SR-IOV: %d\n", err);
|
|
|
- goto err_unlock;
|
|
|
|
|
|
|
+ return err;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ mutex_lock(&pf->lock);
|
|
|
|
|
+
|
|
|
err = nfp_app_sriov_enable(pf->app, num_vfs);
|
|
err = nfp_app_sriov_enable(pf->app, num_vfs);
|
|
|
if (err) {
|
|
if (err) {
|
|
|
dev_warn(&pdev->dev,
|
|
dev_warn(&pdev->dev,
|
|
@@ -129,9 +128,8 @@ static int nfp_pcie_sriov_enable(struct pci_dev *pdev, int num_vfs)
|
|
|
return num_vfs;
|
|
return num_vfs;
|
|
|
|
|
|
|
|
err_sriov_disable:
|
|
err_sriov_disable:
|
|
|
- pci_disable_sriov(pdev);
|
|
|
|
|
-err_unlock:
|
|
|
|
|
mutex_unlock(&pf->lock);
|
|
mutex_unlock(&pf->lock);
|
|
|
|
|
+ pci_disable_sriov(pdev);
|
|
|
return err;
|
|
return err;
|
|
|
#endif
|
|
#endif
|
|
|
return 0;
|
|
return 0;
|
|
@@ -158,10 +156,10 @@ static int nfp_pcie_sriov_disable(struct pci_dev *pdev)
|
|
|
|
|
|
|
|
pf->num_vfs = 0;
|
|
pf->num_vfs = 0;
|
|
|
|
|
|
|
|
|
|
+ mutex_unlock(&pf->lock);
|
|
|
|
|
+
|
|
|
pci_disable_sriov(pdev);
|
|
pci_disable_sriov(pdev);
|
|
|
dev_dbg(&pdev->dev, "Removed VFs.\n");
|
|
dev_dbg(&pdev->dev, "Removed VFs.\n");
|
|
|
-
|
|
|
|
|
- mutex_unlock(&pf->lock);
|
|
|
|
|
#endif
|
|
#endif
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|