aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 3cce6281e075..c24366868b39 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -3970,6 +3970,19 @@ static void mlx5e_register_vport_rep(struct mlx5_core_dev *mdev)
3970 } 3970 }
3971} 3971}
3972 3972
3973static void mlx5e_unregister_vport_rep(struct mlx5_core_dev *mdev)
3974{
3975 struct mlx5_eswitch *esw = mdev->priv.eswitch;
3976 int total_vfs = MLX5_TOTAL_VPORTS(mdev);
3977 int vport;
3978
3979 if (!MLX5_CAP_GEN(mdev, vport_group_manager))
3980 return;
3981
3982 for (vport = 1; vport < total_vfs; vport++)
3983 mlx5_eswitch_unregister_vport_rep(esw, vport);
3984}
3985
3973void mlx5e_detach_netdev(struct mlx5_core_dev *mdev, struct net_device *netdev) 3986void mlx5e_detach_netdev(struct mlx5_core_dev *mdev, struct net_device *netdev)
3974{ 3987{
3975 struct mlx5e_priv *priv = netdev_priv(netdev); 3988 struct mlx5e_priv *priv = netdev_priv(netdev);
@@ -4016,6 +4029,7 @@ static int mlx5e_attach(struct mlx5_core_dev *mdev, void *vpriv)
4016 return err; 4029 return err;
4017 } 4030 }
4018 4031
4032 mlx5e_register_vport_rep(mdev);
4019 return 0; 4033 return 0;
4020} 4034}
4021 4035
@@ -4027,6 +4041,7 @@ static void mlx5e_detach(struct mlx5_core_dev *mdev, void *vpriv)
4027 if (!netif_device_present(netdev)) 4041 if (!netif_device_present(netdev))
4028 return; 4042 return;
4029 4043
4044 mlx5e_unregister_vport_rep(mdev);
4030 mlx5e_detach_netdev(mdev, netdev); 4045 mlx5e_detach_netdev(mdev, netdev);
4031 mlx5e_destroy_mdev_resources(mdev); 4046 mlx5e_destroy_mdev_resources(mdev);
4032} 4047}
@@ -4045,8 +4060,6 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
4045 if (err) 4060 if (err)
4046 return NULL; 4061 return NULL;
4047 4062
4048 mlx5e_register_vport_rep(mdev);
4049
4050 if (MLX5_CAP_GEN(mdev, vport_group_manager)) 4063 if (MLX5_CAP_GEN(mdev, vport_group_manager))
4051 ppriv = &esw->offloads.vport_reps[0]; 4064 ppriv = &esw->offloads.vport_reps[0];
4052 4065
@@ -4098,13 +4111,7 @@ void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, struct mlx5e_priv *priv)
4098 4111
4099static void mlx5e_remove(struct mlx5_core_dev *mdev, void *vpriv) 4112static void mlx5e_remove(struct mlx5_core_dev *mdev, void *vpriv)
4100{ 4113{
4101 struct mlx5_eswitch *esw = mdev->priv.eswitch;
4102 int total_vfs = MLX5_TOTAL_VPORTS(mdev);
4103 struct mlx5e_priv *priv = vpriv; 4114 struct mlx5e_priv *priv = vpriv;
4104 int vport;
4105
4106 for (vport = 1; vport < total_vfs; vport++)
4107 mlx5_eswitch_unregister_vport_rep(esw, vport);
4108 4115
4109 unregister_netdev(priv->netdev); 4116 unregister_netdev(priv->netdev);
4110 mlx5e_detach(mdev, vpriv); 4117 mlx5e_detach(mdev, vpriv);