net/mlx5e: Determine source port properly for vlan push action
Termination tables are used for vlan push actions on uplink ports.
To support RoCE dual port the source port value was placed in a register.
Fix the code to use an API method returning the source port according to
the FW capabilities.
Fixes: 10caabdaad
("net/mlx5e: Use termination table for VLAN push actions")
Signed-off-by: Dmytro Linkin <dmitrolin@mellanox.com>
Reviewed-by: Jianbo Liu <jianbol@mellanox.com>
Reviewed-by: Oz Shlomo <ozsh@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
6dfef396ea
commit
d5dbcc4e87
|
@ -177,22 +177,32 @@ mlx5_eswitch_termtbl_actions_move(struct mlx5_flow_act *src,
|
|||
memset(&src->vlan[1], 0, sizeof(src->vlan[1]));
|
||||
}
|
||||
|
||||
static bool mlx5_eswitch_offload_is_uplink_port(const struct mlx5_eswitch *esw,
|
||||
const struct mlx5_flow_spec *spec)
|
||||
{
|
||||
u32 port_mask, port_value;
|
||||
|
||||
if (MLX5_CAP_ESW_FLOWTABLE(esw->dev, flow_source))
|
||||
return spec->flow_context.flow_source == MLX5_VPORT_UPLINK;
|
||||
|
||||
port_mask = MLX5_GET(fte_match_param, spec->match_criteria,
|
||||
misc_parameters.source_port);
|
||||
port_value = MLX5_GET(fte_match_param, spec->match_value,
|
||||
misc_parameters.source_port);
|
||||
return (port_mask & port_value & 0xffff) == MLX5_VPORT_UPLINK;
|
||||
}
|
||||
|
||||
bool
|
||||
mlx5_eswitch_termtbl_required(struct mlx5_eswitch *esw,
|
||||
struct mlx5_flow_act *flow_act,
|
||||
struct mlx5_flow_spec *spec)
|
||||
{
|
||||
u32 port_mask = MLX5_GET(fte_match_param, spec->match_criteria,
|
||||
misc_parameters.source_port);
|
||||
u32 port_value = MLX5_GET(fte_match_param, spec->match_value,
|
||||
misc_parameters.source_port);
|
||||
|
||||
if (!MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, termination_table))
|
||||
return false;
|
||||
|
||||
/* push vlan on RX */
|
||||
return (flow_act->action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH) &&
|
||||
((port_mask & port_value) == MLX5_VPORT_UPLINK);
|
||||
mlx5_eswitch_offload_is_uplink_port(esw, spec);
|
||||
}
|
||||
|
||||
struct mlx5_flow_handle *
|
||||
|
|
Loading…
Reference in New Issue
Block a user