net/mlx5: Add VHCA RX flow destination support for FW steering

Introduce MLX5_FLOW_DESTINATION_TYPE_VHCA_RX as a new flow steering
destination type.

Wire the new destination through flow steering command setup by mapping
it to MLX5_IFC_FLOW_DESTINATION_TYPE_VHCA_RX and passing the vhca id,
extend forward-destination validation to accept it, and teach the flow
steering tracepoint formatter to print rx_vhca_id.

Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20260309093435.1850724-8-tariqt@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
Shay Drory 2026-03-09 11:34:33 +02:00 committed by Leon Romanovsky
parent 971b28accc
commit 0bc9059fab
4 changed files with 16 additions and 2 deletions

View File

@ -282,6 +282,9 @@ const char *parse_fs_dst(struct trace_seq *p,
case MLX5_FLOW_DESTINATION_TYPE_NONE:
trace_seq_printf(p, "none\n");
break;
case MLX5_FLOW_DESTINATION_TYPE_VHCA_RX:
trace_seq_printf(p, "rx_vhca_id=%u\n", dst->vhca.id);
break;
}
trace_seq_putc(p, 0);

View File

@ -716,6 +716,10 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
id = dst->dest_attr.ft->id;
ifc_type = MLX5_IFC_FLOW_DESTINATION_TYPE_TABLE_TYPE;
break;
case MLX5_FLOW_DESTINATION_TYPE_VHCA_RX:
id = dst->dest_attr.vhca.id;
ifc_type = MLX5_IFC_FLOW_DESTINATION_TYPE_VHCA_RX;
break;
default:
id = dst->dest_attr.tir_num;
ifc_type = MLX5_IFC_FLOW_DESTINATION_TYPE_TIR;

View File

@ -503,7 +503,8 @@ static bool is_fwd_dest_type(enum mlx5_flow_destination_type type)
type == MLX5_FLOW_DESTINATION_TYPE_FLOW_SAMPLER ||
type == MLX5_FLOW_DESTINATION_TYPE_TIR ||
type == MLX5_FLOW_DESTINATION_TYPE_RANGE ||
type == MLX5_FLOW_DESTINATION_TYPE_TABLE_TYPE;
type == MLX5_FLOW_DESTINATION_TYPE_TABLE_TYPE ||
type == MLX5_FLOW_DESTINATION_TYPE_VHCA_RX;
}
static bool check_valid_spec(const struct mlx5_flow_spec *spec)
@ -1890,7 +1891,9 @@ static bool mlx5_flow_dests_cmp(struct mlx5_flow_destination *d1,
d1->range.hit_ft == d2->range.hit_ft &&
d1->range.miss_ft == d2->range.miss_ft &&
d1->range.min == d2->range.min &&
d1->range.max == d2->range.max))
d1->range.max == d2->range.max) ||
(d1->type == MLX5_FLOW_DESTINATION_TYPE_VHCA_RX &&
d1->vhca.id == d2->vhca.id))
return true;
}

View File

@ -55,6 +55,7 @@ enum mlx5_flow_destination_type {
MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM,
MLX5_FLOW_DESTINATION_TYPE_RANGE,
MLX5_FLOW_DESTINATION_TYPE_TABLE_TYPE,
MLX5_FLOW_DESTINATION_TYPE_VHCA_RX,
};
enum {
@ -189,6 +190,9 @@ struct mlx5_flow_destination {
u32 ft_num;
struct mlx5_flow_table *ft;
struct mlx5_fc *counter;
struct {
u16 id;
} vhca;
struct {
u16 num;
u16 vhca_id;