Skip to content

Commit 9bee385

Browse files
shayshyiSaeed Mahameed
authored andcommitted
net/mlx5: E-switch, refactor FDB miss rule add/remove
Currently, E-switch FDB have a single peer miss rule. In order to support more than one peer, refactor E-switch FDB to have peer miss rule per peer, and change the code to add/remove a rule from specific peer. Signed-off-by: Shay Drory <[email protected]> Reviewed-by: Mark Bloch <[email protected]> Reviewed-by: Roi Dayan <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 18e31d4 commit 9bee385

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

drivers/net/ethernet/mellanox/mlx5/core/eswitch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ struct mlx5_eswitch_fdb {
218218
struct mlx5_flow_group *send_to_vport_grp;
219219
struct mlx5_flow_group *send_to_vport_meta_grp;
220220
struct mlx5_flow_group *peer_miss_grp;
221-
struct mlx5_flow_handle **peer_miss_rules;
221+
struct mlx5_flow_handle **peer_miss_rules[MLX5_MAX_PORTS];
222222
struct mlx5_flow_group *miss_grp;
223223
struct mlx5_flow_handle **send_to_vport_meta_rules;
224224
struct mlx5_flow_handle *miss_rule_uni;

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,7 @@ static int esw_add_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
11321132
flows[vport->index] = flow;
11331133
}
11341134

1135-
esw->fdb_table.offloads.peer_miss_rules = flows;
1135+
esw->fdb_table.offloads.peer_miss_rules[mlx5_get_dev_index(peer_dev)] = flows;
11361136

11371137
kvfree(spec);
11381138
return 0;
@@ -1160,13 +1160,14 @@ static int esw_add_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
11601160
return err;
11611161
}
11621162

1163-
static void esw_del_fdb_peer_miss_rules(struct mlx5_eswitch *esw)
1163+
static void esw_del_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
1164+
struct mlx5_core_dev *peer_dev)
11641165
{
11651166
struct mlx5_flow_handle **flows;
11661167
struct mlx5_vport *vport;
11671168
unsigned long i;
11681169

1169-
flows = esw->fdb_table.offloads.peer_miss_rules;
1170+
flows = esw->fdb_table.offloads.peer_miss_rules[mlx5_get_dev_index(peer_dev)];
11701171

11711172
mlx5_esw_for_each_vf_vport(esw, i, vport, mlx5_core_max_vfs(esw->dev))
11721173
mlx5_del_flow_rules(flows[vport->index]);
@@ -2700,7 +2701,7 @@ static void mlx5_esw_offloads_unpair(struct mlx5_eswitch *esw,
27002701
mlx5e_tc_clean_fdb_peer_flows(esw);
27012702
#endif
27022703
mlx5_esw_offloads_rep_event_unpair(esw, peer_esw);
2703-
esw_del_fdb_peer_miss_rules(esw);
2704+
esw_del_fdb_peer_miss_rules(esw, peer_esw->dev);
27042705
}
27052706

27062707
static int mlx5_esw_offloads_pair(struct mlx5_eswitch *esw,

0 commit comments

Comments
 (0)