[1/8] net/mlx5/hws: set eswitch owner vhc ID valid accordingly
Checks
Commit Message
From: Erez Shitrit <erezsh@nvidia.com>
eswitch_owner_vhca_id_valid value should be set to 1 only on
merged-eswitch device.
Signed-off-by: Erez Shitrit <erezsh@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
drivers/net/mlx5/hws/mlx5dr_action.c | 12 ++++++++++++
drivers/net/mlx5/hws/mlx5dr_cmd.c | 3 ++-
drivers/net/mlx5/hws/mlx5dr_cmd.h | 1 +
3 files changed, 15 insertions(+), 1 deletion(-)
@@ -680,6 +680,8 @@ mlx5dr_action_fixup_stc_attr(struct mlx5dr_context *ctx,
fixup_stc_attr->stc_offset = stc_attr->stc_offset;
fixup_stc_attr->vport.esw_owner_vhca_id = ctx->caps->vhca_id;
fixup_stc_attr->vport.vport_num = ctx->caps->eswitch_manager_vport_number;
+ fixup_stc_attr->vport.eswitch_owner_vhca_id_valid =
+ ctx->caps->merged_eswitch;
use_fixup = true;
}
break;
@@ -700,6 +702,8 @@ mlx5dr_action_fixup_stc_attr(struct mlx5dr_context *ctx,
fixup_stc_attr->stc_offset = stc_attr->stc_offset;
fixup_stc_attr->vport.vport_num = 0;
fixup_stc_attr->vport.esw_owner_vhca_id = stc_attr->vport.esw_owner_vhca_id;
+ fixup_stc_attr->vport.eswitch_owner_vhca_id_valid =
+ ctx->caps->merged_eswitch;
}
use_fixup = true;
break;
@@ -1429,6 +1433,14 @@ static int mlx5dr_action_create_dest_vport_hws(struct mlx5dr_context *ctx,
action->vport.vport_num = vport_caps.vport_num;
action->vport.esw_owner_vhca_id = vport_caps.esw_owner_vhca_id;
+ if (!ctx->caps->merged_eswitch &&
+ action->vport.esw_owner_vhca_id != ctx->caps->vhca_id) {
+ DR_LOG(ERR, "Not merged-eswitch (%d), not allowed to send to other vhca_id (%d)",
+ ctx->caps->vhca_id, action->vport.esw_owner_vhca_id);
+ rte_errno = ENOTSUP;
+ return rte_errno;
+ }
+
ret = mlx5dr_action_create_stcs(action, NULL);
if (ret) {
DR_LOG(ERR, "Failed creating stc for port %d", ib_port_num);
@@ -515,7 +515,8 @@ mlx5dr_cmd_stc_modify_set_stc_param(struct mlx5dr_cmd_stc_modify_attr *stc_attr,
stc_attr->vport.vport_num);
MLX5_SET(stc_ste_param_vport, stc_param, eswitch_owner_vhca_id,
stc_attr->vport.esw_owner_vhca_id);
- MLX5_SET(stc_ste_param_vport, stc_param, eswitch_owner_vhca_id_valid, 1);
+ MLX5_SET(stc_ste_param_vport, stc_param, eswitch_owner_vhca_id_valid,
+ stc_attr->vport.eswitch_owner_vhca_id_valid);
break;
case MLX5_IFC_STC_ACTION_TYPE_DROP:
case MLX5_IFC_STC_ACTION_TYPE_NOP:
@@ -133,6 +133,7 @@ struct mlx5dr_cmd_stc_modify_attr {
struct {
uint16_t vport_num;
uint16_t esw_owner_vhca_id;
+ uint8_t eswitch_owner_vhca_id_valid;
} vport;
struct {
struct mlx5dr_pool_chunk ste;