From 7863c912e8a07b9431fd6d9a9e371da47cb0f308 Mon Sep 17 00:00:00 2001 From: Yevgeny Kliteynik Date: Thu, 29 Oct 2020 01:33:00 +0200 Subject: [PATCH] net/mlx5: DR, Fix STEv0 source_eswitch_owner_vhca_id support Check vport_cap only if match on source gvmi is required. Signed-off-by: Yevgeny Kliteynik Reviewed-by: Alex Vesker Reviewed-by: Saeed Mahameed Signed-off-by: Saeed Mahameed --- .../mellanox/mlx5/core/steering/dr_ste_v0.c | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v0.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v0.c index 97ba875999eb..3ce3197aaf90 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v0.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v0.c @@ -1227,23 +1227,26 @@ dr_ste_v0_build_src_gvmi_qpn_tag(struct mlx5dr_match_param *value, caps = &dmn->peer_dmn->info.caps; else return -EINVAL; + + misc->source_eswitch_owner_vhca_id = 0; } else { caps = &dmn->info.caps; } - vport_cap = mlx5dr_get_vport_cap(caps, misc->source_port); - if (!vport_cap) { - mlx5dr_err(dmn, "Vport 0x%x is invalid\n", - misc->source_port); - return -EINVAL; - } - source_gvmi_set = MLX5_GET(ste_src_gvmi_qp, bit_mask, source_gvmi); - if (vport_cap->vport_gvmi && source_gvmi_set) - MLX5_SET(ste_src_gvmi_qp, tag, source_gvmi, vport_cap->vport_gvmi); + if (source_gvmi_set) { + vport_cap = mlx5dr_get_vport_cap(caps, misc->source_port); + if (!vport_cap) { + mlx5dr_err(dmn, "Vport 0x%x is invalid\n", + misc->source_port); + return -EINVAL; + } - misc->source_eswitch_owner_vhca_id = 0; - misc->source_port = 0; + if (vport_cap->vport_gvmi) + MLX5_SET(ste_src_gvmi_qp, tag, source_gvmi, vport_cap->vport_gvmi); + + misc->source_port = 0; + } return 0; }