Skip to content

Commit 0faddfe

Browse files
jialiu02Saeed Mahameed
authored andcommitted
net/mlx5e: E-Switch, Add misc bit when misc fields changed for mirroring
The modified flow_context fields in FTE must be indicated in modify_enable bitmask. Previously, the misc bit in modify_enable is always set as source vport must be set for each rule. So, when parsing vxlan/gre/geneve/qinq rules, this bit is not set because those are all from the same misc fileds that source vport fields are located at, and we don't need to set the indicator twice. After adding per vport tables for mirroring, misc bit is not set, then firmware syndrome happens. To fix it, set the bit wherever misc fileds are changed. This also makes it unnecessary to check misc fields and set the misc bit accordingly in metadata matching, so here remove it. Besides, flow_source must be specified for uplink because firmware will check it and some actions are only allowed for packets received from uplink. Fixes: 96e3268 ("net/mlx5e: Eswitch, Use per vport tables for mirroring") Signed-off-by: Jianbo Liu <[email protected]> Reviewed-by: Chris Mi <[email protected]> Reviewed-by: Roi Dayan <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 01cefbb commit 0faddfe

File tree

5 files changed

+10
-3
lines changed

5 files changed

+10
-3
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,8 @@ static int mlx5e_tc_tun_parse_geneve_params(struct mlx5e_priv *priv,
301301
MLX5_SET(fte_match_set_misc, misc_v, geneve_protocol_type, ETH_P_TEB);
302302
}
303303

304+
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;
305+
304306
return 0;
305307
}
306308

drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_gre.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ static int mlx5e_tc_tun_parse_gretap(struct mlx5e_priv *priv,
8080
gre_key.key, be32_to_cpu(enc_keyid.key->keyid));
8181
}
8282

83+
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;
84+
8385
return 0;
8486
}
8587

drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ static int mlx5e_tc_tun_parse_vxlan(struct mlx5e_priv *priv,
136136
MLX5_SET(fte_match_set_misc, misc_v, vxlan_vni,
137137
be32_to_cpu(enc_keyid.key->keyid));
138138

139+
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;
140+
139141
return 0;
140142
}
141143

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2356,6 +2356,7 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
23562356
match.key->vlan_priority);
23572357

23582358
*match_level = MLX5_MATCH_L2;
2359+
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;
23592360
}
23602361
}
23612362

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,6 @@ mlx5_eswitch_set_rule_source_port(struct mlx5_eswitch *esw,
259259
mlx5_eswitch_get_vport_metadata_mask());
260260

261261
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS_2;
262-
misc = MLX5_ADDR_OF(fte_match_param, spec->match_criteria, misc_parameters);
263-
if (memchr_inv(misc, 0, MLX5_ST_SZ_BYTES(fte_match_set_misc)))
264-
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;
265262
} else {
266263
misc = MLX5_ADDR_OF(fte_match_param, spec->match_value, misc_parameters);
267264
MLX5_SET(fte_match_set_misc, misc, source_port, attr->in_rep->vport);
@@ -380,6 +377,9 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
380377
flow_act.modify_hdr = attr->modify_hdr;
381378

382379
if (split) {
380+
if (MLX5_CAP_ESW_FLOWTABLE(esw->dev, flow_source) &&
381+
attr->in_rep->vport == MLX5_VPORT_UPLINK)
382+
spec->flow_context.flow_source = MLX5_FLOW_CONTEXT_FLOW_SOURCE_UPLINK;
383383
fdb = esw_vport_tbl_get(esw, attr);
384384
} else {
385385
if (attr->chain || attr->prio)

0 commit comments

Comments
 (0)