Skip to content

Commit 9df3060

Browse files
Mohamad Haj Yahiadavem330
authored andcommitted
net/mlx5e: Restore vlan filter after seamless reset
When detaching the mlx5e interface clear all the vlans rules from the vlan flow table. When attaching it back restore all the active vlans rules to the HW. Signed-off-by: Mohamad Haj Yahia <mohamad@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 26e59d8 commit 9df3060

File tree

1 file changed

+32
-6
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+32
-6
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_fs.c

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,36 @@ int mlx5e_vlan_rx_kill_vid(struct net_device *dev, __always_unused __be16 proto,
294294
return 0;
295295
}
296296

297+
static void mlx5e_add_vlan_rules(struct mlx5e_priv *priv)
298+
{
299+
int i;
300+
301+
mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_UNTAGGED, 0);
302+
303+
for_each_set_bit(i, priv->fs.vlan.active_vlans, VLAN_N_VID) {
304+
mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_MATCH_VID, i);
305+
}
306+
307+
if (priv->fs.vlan.filter_disabled &&
308+
!(priv->netdev->flags & IFF_PROMISC))
309+
mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, 0);
310+
}
311+
312+
static void mlx5e_del_vlan_rules(struct mlx5e_priv *priv)
313+
{
314+
int i;
315+
316+
mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_UNTAGGED, 0);
317+
318+
for_each_set_bit(i, priv->fs.vlan.active_vlans, VLAN_N_VID) {
319+
mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_MATCH_VID, i);
320+
}
321+
322+
if (priv->fs.vlan.filter_disabled &&
323+
!(priv->netdev->flags & IFF_PROMISC))
324+
mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, 0);
325+
}
326+
297327
#define mlx5e_for_each_hash_node(hn, tmp, hash, i) \
298328
for (i = 0; i < MLX5E_L2_ADDR_HASH_SIZE; i++) \
299329
hlist_for_each_entry_safe(hn, tmp, &hash[i], hlist)
@@ -1024,14 +1054,10 @@ static int mlx5e_create_vlan_table(struct mlx5e_priv *priv)
10241054
if (err)
10251055
goto err_free_g;
10261056

1027-
err = mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_UNTAGGED, 0);
1028-
if (err)
1029-
goto err_destroy_vlan_flow_groups;
1057+
mlx5e_add_vlan_rules(priv);
10301058

10311059
return 0;
10321060

1033-
err_destroy_vlan_flow_groups:
1034-
mlx5e_destroy_groups(ft);
10351061
err_free_g:
10361062
kfree(ft->g);
10371063
err_destroy_vlan_table:
@@ -1043,6 +1069,7 @@ static int mlx5e_create_vlan_table(struct mlx5e_priv *priv)
10431069

10441070
static void mlx5e_destroy_vlan_table(struct mlx5e_priv *priv)
10451071
{
1072+
mlx5e_del_vlan_rules(priv);
10461073
mlx5e_destroy_flow_table(&priv->fs.vlan.ft);
10471074
}
10481075

@@ -1100,7 +1127,6 @@ int mlx5e_create_flow_steering(struct mlx5e_priv *priv)
11001127

11011128
void mlx5e_destroy_flow_steering(struct mlx5e_priv *priv)
11021129
{
1103-
mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_UNTAGGED, 0);
11041130
mlx5e_destroy_vlan_table(priv);
11051131
mlx5e_destroy_l2_table(priv);
11061132
mlx5e_destroy_ttc_table(priv);

0 commit comments

Comments
 (0)