mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
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:
parent
971b28accc
commit
0bc9059fab
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user