diff options
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 23 |
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 | ||
| 3973 | static 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 | |||
| 3973 | void mlx5e_detach_netdev(struct mlx5_core_dev *mdev, struct net_device *netdev) | 3986 | void 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 | ||
| 4099 | static void mlx5e_remove(struct mlx5_core_dev *mdev, void *vpriv) | 4112 | static 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); |
