net/mlx5: fs, add unused destination type
When the caller doesn't pass a destination fs_core will create a unused rule just so a context can be returned. This unused rule is zeroed out and its type is 0 which can be mixed up with MLX5_FLOW_DESTINATION_TYPE_VPORT. Create a dedicated type to differentiate between the two named MLX5_FLOW_DESTINATION_TYPE_NONE. Signed-off-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Maor Gottlieb <maorg@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
c3ae3a9cfe
commit
6510bc0d7c
5 changed files with 14 additions and 2 deletions
|
@ -259,6 +259,9 @@ const char *parse_fs_dst(struct trace_seq *p,
|
|||
case MLX5_FLOW_DESTINATION_TYPE_PORT:
|
||||
trace_seq_printf(p, "port\n");
|
||||
break;
|
||||
case MLX5_FLOW_DESTINATION_TYPE_NONE:
|
||||
trace_seq_printf(p, "none\n");
|
||||
break;
|
||||
}
|
||||
|
||||
trace_seq_putc(p, 0);
|
||||
|
|
|
@ -455,7 +455,8 @@ static int mlx5_set_extended_dest(struct mlx5_core_dev *dev,
|
|||
return 0;
|
||||
|
||||
list_for_each_entry(dst, &fte->node.children, node.list) {
|
||||
if (dst->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_COUNTER)
|
||||
if (dst->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_COUNTER ||
|
||||
dst->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_NONE)
|
||||
continue;
|
||||
if ((dst->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_VPORT ||
|
||||
dst->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_UPLINK) &&
|
||||
|
@ -579,6 +580,8 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
|
|||
continue;
|
||||
|
||||
switch (type) {
|
||||
case MLX5_FLOW_DESTINATION_TYPE_NONE:
|
||||
continue;
|
||||
case MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM:
|
||||
id = dst->dest_attr.ft_num;
|
||||
ifc_type = MLX5_IFC_FLOW_DESTINATION_TYPE_FLOW_TABLE;
|
||||
|
|
|
@ -1289,6 +1289,8 @@ static struct mlx5_flow_rule *alloc_rule(struct mlx5_flow_destination *dest)
|
|||
rule->node.type = FS_TYPE_FLOW_DEST;
|
||||
if (dest)
|
||||
memcpy(&rule->dest_attr, dest, sizeof(*dest));
|
||||
else
|
||||
rule->dest_attr.type = MLX5_FLOW_DESTINATION_TYPE_NONE;
|
||||
|
||||
return rule;
|
||||
}
|
||||
|
|
|
@ -604,7 +604,8 @@ static int mlx5dr_cmd_set_extended_dest(struct mlx5_core_dev *dev,
|
|||
if (!(fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST))
|
||||
return 0;
|
||||
for (i = 0; i < fte->dests_size; i++) {
|
||||
if (fte->dest_arr[i].type == MLX5_FLOW_DESTINATION_TYPE_COUNTER)
|
||||
if (fte->dest_arr[i].type == MLX5_FLOW_DESTINATION_TYPE_COUNTER ||
|
||||
fte->dest_arr[i].type == MLX5_FLOW_DESTINATION_TYPE_NONE)
|
||||
continue;
|
||||
if ((fte->dest_arr[i].type == MLX5_FLOW_DESTINATION_TYPE_VPORT ||
|
||||
fte->dest_arr[i].type == MLX5_FLOW_DESTINATION_TYPE_UPLINK) &&
|
||||
|
@ -727,6 +728,8 @@ int mlx5dr_cmd_set_fte(struct mlx5_core_dev *dev,
|
|||
continue;
|
||||
|
||||
switch (type) {
|
||||
case MLX5_FLOW_DESTINATION_TYPE_NONE:
|
||||
continue;
|
||||
case MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM:
|
||||
id = fte->dest_arr[i].ft_num;
|
||||
ifc_type = MLX5_IFC_FLOW_DESTINATION_TYPE_FLOW_TABLE;
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#define MLX5_SET_CFG(p, f, v) MLX5_SET(create_flow_group_in, p, f, v)
|
||||
|
||||
enum mlx5_flow_destination_type {
|
||||
MLX5_FLOW_DESTINATION_TYPE_NONE,
|
||||
MLX5_FLOW_DESTINATION_TYPE_VPORT,
|
||||
MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE,
|
||||
MLX5_FLOW_DESTINATION_TYPE_TIR,
|
||||
|
|
Loading…
Add table
Reference in a new issue