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>
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);
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;
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)
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;
}
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 {
u32 ft_num;
struct mlx5_flow_table *ft;
struct mlx5_fc *counter;
+ struct {
+ u16 id;
+ } vhca;
struct {
u16 num;
u16 vhca_id;