Message ID | 20200430120308.92773-2-schnelle@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | [1/1] net/mlx5: Call pci_disable_sriov() on remove | expand |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c index 3094d20297a9..2401961c9f5b 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c @@ -114,6 +114,8 @@ mlx5_device_disable_sriov(struct mlx5_core_dev *dev, int num_vfs, bool clear_vf) int err; int vf; + pci_disable_sriov(dev->pdev); + for (vf = num_vfs - 1; vf >= 0; vf--) { if (!sriov->vfs_ctx[vf].enabled) continue; @@ -156,7 +158,6 @@ static void mlx5_sriov_disable(struct pci_dev *pdev) struct mlx5_core_dev *dev = pci_get_drvdata(pdev); int num_vfs = pci_num_vf(dev->pdev); - pci_disable_sriov(pdev); mlx5_device_disable_sriov(dev, num_vfs, true); }
as described in Documentation/PCI/pci-iov-howto.rst a driver with SR-IOV support should call pci_disable_sriov() in the remove handler. Otherwise removing a PF (e.g. via pci_stop_and_remove_bus_device()) with attached VFs does not properly shut the VFs down before shutting down the PF. This leads to the VF drivers handling defunct devices and accompanying error messages. In the current code pci_disable_sriov() is already called in mlx5_sriov_disable() but not in mlx5_sriov_detach() which is called from the remove handler. Fix this by moving the pci_disable_sriov() call into mlx5_device_disable_sriov() which is called by both. Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> --- drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)