diff options
| -rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_main.c | 24 | ||||
| -rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c | 11 |
2 files changed, 30 insertions, 5 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c index f4c8776e42b6..948d1a4b4643 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c | |||
| @@ -294,6 +294,9 @@ static int nfp_pcie_sriov_disable(struct pci_dev *pdev) | |||
| 294 | 294 | ||
| 295 | static int nfp_pcie_sriov_configure(struct pci_dev *pdev, int num_vfs) | 295 | static int nfp_pcie_sriov_configure(struct pci_dev *pdev, int num_vfs) |
| 296 | { | 296 | { |
| 297 | if (!pci_get_drvdata(pdev)) | ||
| 298 | return -ENOENT; | ||
| 299 | |||
| 297 | if (num_vfs == 0) | 300 | if (num_vfs == 0) |
| 298 | return nfp_pcie_sriov_disable(pdev); | 301 | return nfp_pcie_sriov_disable(pdev); |
| 299 | else | 302 | else |
| @@ -720,9 +723,13 @@ err_pci_disable: | |||
| 720 | return err; | 723 | return err; |
| 721 | } | 724 | } |
| 722 | 725 | ||
| 723 | static void nfp_pci_remove(struct pci_dev *pdev) | 726 | static void __nfp_pci_shutdown(struct pci_dev *pdev, bool unload_fw) |
| 724 | { | 727 | { |
| 725 | struct nfp_pf *pf = pci_get_drvdata(pdev); | 728 | struct nfp_pf *pf; |
| 729 | |||
| 730 | pf = pci_get_drvdata(pdev); | ||
| 731 | if (!pf) | ||
| 732 | return; | ||
| 726 | 733 | ||
| 727 | nfp_hwmon_unregister(pf); | 734 | nfp_hwmon_unregister(pf); |
| 728 | 735 | ||
| @@ -733,7 +740,7 @@ static void nfp_pci_remove(struct pci_dev *pdev) | |||
| 733 | vfree(pf->dumpspec); | 740 | vfree(pf->dumpspec); |
| 734 | kfree(pf->rtbl); | 741 | kfree(pf->rtbl); |
| 735 | nfp_mip_close(pf->mip); | 742 | nfp_mip_close(pf->mip); |
| 736 | if (pf->fw_loaded) | 743 | if (unload_fw && pf->fw_loaded) |
| 737 | nfp_fw_unload(pf); | 744 | nfp_fw_unload(pf); |
| 738 | 745 | ||
| 739 | destroy_workqueue(pf->wq); | 746 | destroy_workqueue(pf->wq); |
| @@ -749,11 +756,22 @@ static void nfp_pci_remove(struct pci_dev *pdev) | |||
| 749 | pci_disable_device(pdev); | 756 | pci_disable_device(pdev); |
| 750 | } | 757 | } |
| 751 | 758 | ||
| 759 | static void nfp_pci_remove(struct pci_dev *pdev) | ||
| 760 | { | ||
| 761 | __nfp_pci_shutdown(pdev, true); | ||
| 762 | } | ||
| 763 | |||
| 764 | static void nfp_pci_shutdown(struct pci_dev *pdev) | ||
| 765 | { | ||
| 766 | __nfp_pci_shutdown(pdev, false); | ||
| 767 | } | ||
| 768 | |||
| 752 | static struct pci_driver nfp_pci_driver = { | 769 | static struct pci_driver nfp_pci_driver = { |
| 753 | .name = nfp_driver_name, | 770 | .name = nfp_driver_name, |
| 754 | .id_table = nfp_pci_device_ids, | 771 | .id_table = nfp_pci_device_ids, |
| 755 | .probe = nfp_pci_probe, | 772 | .probe = nfp_pci_probe, |
| 756 | .remove = nfp_pci_remove, | 773 | .remove = nfp_pci_remove, |
| 774 | .shutdown = nfp_pci_shutdown, | ||
| 757 | .sriov_configure = nfp_pcie_sriov_configure, | 775 | .sriov_configure = nfp_pcie_sriov_configure, |
| 758 | }; | 776 | }; |
| 759 | 777 | ||
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c b/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c index 1145849ca7ba..e4977cdf7678 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c | |||
| @@ -282,8 +282,14 @@ err_free_vf: | |||
| 282 | 282 | ||
| 283 | static void nfp_netvf_pci_remove(struct pci_dev *pdev) | 283 | static void nfp_netvf_pci_remove(struct pci_dev *pdev) |
| 284 | { | 284 | { |
| 285 | struct nfp_net_vf *vf = pci_get_drvdata(pdev); | 285 | struct nfp_net_vf *vf; |
| 286 | struct nfp_net *nn = vf->nn; | 286 | struct nfp_net *nn; |
| 287 | |||
| 288 | vf = pci_get_drvdata(pdev); | ||
| 289 | if (!vf) | ||
| 290 | return; | ||
| 291 | |||
| 292 | nn = vf->nn; | ||
| 287 | 293 | ||
| 288 | /* Note, the order is slightly different from above as we need | 294 | /* Note, the order is slightly different from above as we need |
| 289 | * to keep the nn pointer around till we have freed everything. | 295 | * to keep the nn pointer around till we have freed everything. |
| @@ -317,4 +323,5 @@ struct pci_driver nfp_netvf_pci_driver = { | |||
| 317 | .id_table = nfp_netvf_pci_device_ids, | 323 | .id_table = nfp_netvf_pci_device_ids, |
| 318 | .probe = nfp_netvf_pci_probe, | 324 | .probe = nfp_netvf_pci_probe, |
| 319 | .remove = nfp_netvf_pci_remove, | 325 | .remove = nfp_netvf_pci_remove, |
| 326 | .shutdown = nfp_netvf_pci_remove, | ||
| 320 | }; | 327 | }; |
