DPDK patches and discussions
 help / color / mirror / Atom feed
From: Hamdan Igbaria <hamdani@nvidia.com>
To: <hamdani@nvidia.com>, <viacheslavo@nvidia.com>,
	<thomas@monjalon.net>, <suanmingm@nvidia.com>,
	Dariusz Sosnowski <dsosnowski@nvidia.com>,
	Bing Zhao <bingz@nvidia.com>, Ori Kam <orika@nvidia.com>,
	Matan Azrad <matan@nvidia.com>
Cc: <dev@dpdk.org>, Erez Shitrit <erezsh@nvidia.com>
Subject: [PATCH 6/8] net/mlx5/hws: action changes to support unified domain
Date: Sun, 16 Feb 2025 13:04:12 +0200	[thread overview]
Message-ID: <20250216110414.10926-6-hamdani@nvidia.com> (raw)
In-Reply-To: <20250216110414.10926-1-hamdani@nvidia.com>

From: Erez Shitrit <erezsh@nvidia.com>

Actions are depended on the sub-domain that will be used.
So handle the actions accordingly.
From now on we don't fix-up for actions that doesn't fit the right
domain, we will let it be failed by the FW while creating the STC for
it.

Signed-off-by: Erez Shitrit <erezsh@nvidia.com>
Signed-off-by: Hamdan Igbaria <hamdani@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
 drivers/net/mlx5/hws/mlx5dr.h        |   5 +-
 drivers/net/mlx5/hws/mlx5dr_action.c | 222 +++++++++++++++++++++++----
 drivers/net/mlx5/hws/mlx5dr_action.h |   2 +-
 3 files changed, 200 insertions(+), 29 deletions(-)

diff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h
index e0e7f5c147..58526fc08e 100644
--- a/drivers/net/mlx5/hws/mlx5dr.h
+++ b/drivers/net/mlx5/hws/mlx5dr.h
@@ -66,10 +66,13 @@ enum mlx5dr_action_flags {
 	MLX5DR_ACTION_FLAG_HWS_RX = 1 << 3,
 	MLX5DR_ACTION_FLAG_HWS_TX = 1 << 4,
 	MLX5DR_ACTION_FLAG_HWS_FDB = 1 << 5,
+	MLX5DR_ACTION_FLAG_HWS_FDB_RX = 1 << 6,
+	MLX5DR_ACTION_FLAG_HWS_FDB_TX = 1 << 7,
+	MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED = 1 << 8,
 	/* Shared action can be used over a few threads, since data is written
 	 * only once at the creation of the action.
 	 */
-	MLX5DR_ACTION_FLAG_SHARED = 1 << 6,
+	MLX5DR_ACTION_FLAG_SHARED = 1 << 9,
 };
 
 enum mlx5dr_action_aso_meter_color {
diff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c
index 8e95abf7da..b9452a3ebc 100644
--- a/drivers/net/mlx5/hws/mlx5dr_action.c
+++ b/drivers/net/mlx5/hws/mlx5dr_action.c
@@ -10,6 +10,12 @@
 /* Header removal size limited to 128B (64 words) */
 #define MLX5DR_ACTION_REMOVE_HEADER_MAX_SIZE 128
 
+static struct mlx5dr_devx_obj *
+mlx5dr_action_get_stc_obj_by_tbl_type(enum mlx5dr_table_type table_type,
+				      struct mlx5dr_pool *stc_pool,
+				      struct mlx5dr_pool_chunk *stc,
+				      bool is_mirror);
+
 /* This is the maximum allowed action order for each table type:
  *	 TX: POP_VLAN, CTR, ASO_METER, AS_CT, PUSH_VLAN, MODIFY, ENCAP, Term
  *	 RX: TAG, DECAP, POP_VLAN, CTR, ASO_METER, ASO_CT, PUSH_VLAN, MODIFY,
@@ -220,8 +226,47 @@ static int mlx5dr_action_get_shared_stc(struct mlx5dr_action *action,
 		}
 	}
 
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_RX) {
+		ret = mlx5dr_action_get_shared_stc_nic(ctx, stc_type,
+						       MLX5DR_TABLE_TYPE_FDB_RX);
+		if (ret) {
+			DR_LOG(ERR, "Failed to allocate FDB_RX shared STCs (type: %d)",
+			       stc_type);
+			goto clean_nic_fdb_stc;
+		}
+	}
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_TX) {
+		ret = mlx5dr_action_get_shared_stc_nic(ctx, stc_type,
+						       MLX5DR_TABLE_TYPE_FDB_TX);
+		if (ret) {
+			DR_LOG(ERR, "Failed to allocate FDB_TX shared STCs (type: %d)",
+			       stc_type);
+			goto clean_nic_fdb_rx_stc;
+		}
+	}
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED) {
+		ret = mlx5dr_action_get_shared_stc_nic(ctx, stc_type,
+						       MLX5DR_TABLE_TYPE_FDB_UNIFIED);
+		if (ret) {
+			DR_LOG(ERR, "Failed to allocate FDB_UNIFIED shared STCs (type: %d)",
+			       stc_type);
+			goto clean_nic_fdb_tx_stc;
+		}
+	}
+
 	return 0;
 
+clean_nic_fdb_tx_stc:
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_TX)
+		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB_TX);
+clean_nic_fdb_rx_stc:
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_RX)
+		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB_RX);
+clean_nic_fdb_stc:
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB)
+		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB);
 clean_nic_tx_stc:
 	if (action->flags & MLX5DR_ACTION_FLAG_HWS_TX)
 		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_NIC_TX);
@@ -250,6 +295,15 @@ static void mlx5dr_action_put_shared_stc(struct mlx5dr_action *action,
 
 	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB)
 		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB);
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_RX)
+		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB_RX);
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_TX)
+		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB_TX);
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED)
+		mlx5dr_action_put_shared_stc_nic(ctx, stc_type, MLX5DR_TABLE_TYPE_FDB_UNIFIED);
 }
 
 static void
@@ -689,14 +743,37 @@ static void mlx5dr_action_print_combo(enum mlx5dr_action_type *user_actions)
 	}
 }
 
+static const uint32_t *
+mlx5dr_action_get_order_entry(enum mlx5dr_table_type table_type)
+{
+	switch (table_type) {
+	case MLX5DR_TABLE_TYPE_NIC_RX:
+		return action_order_arr[MLX5DR_TABLE_TYPE_NIC_RX];
+	case MLX5DR_TABLE_TYPE_NIC_TX:
+		return action_order_arr[MLX5DR_TABLE_TYPE_NIC_TX];
+	case MLX5DR_TABLE_TYPE_FDB:
+	case MLX5DR_TABLE_TYPE_FDB_RX:
+	case MLX5DR_TABLE_TYPE_FDB_TX:
+	case MLX5DR_TABLE_TYPE_FDB_UNIFIED:
+		return action_order_arr[MLX5DR_TABLE_TYPE_FDB];
+	default:
+		assert(0);
+		DR_LOG(ERR, "no such type: %d", table_type);
+		return NULL;
+	}
+}
+
 bool mlx5dr_action_check_combo(enum mlx5dr_action_type *user_actions,
 			       enum mlx5dr_table_type table_type)
 {
-	const uint32_t *order_arr = action_order_arr[table_type];
+	const uint32_t *order_arr = mlx5dr_action_get_order_entry(table_type);
 	uint8_t order_idx = 0;
 	uint8_t user_idx = 0;
 	bool valid_combo;
 
+	if (!order_arr)
+		return false;
+
 	while (order_arr[order_idx] != BIT(MLX5DR_ACTION_TYP_LAST)) {
 		/* User action order validated move to next user action */
 		if (BIT(user_actions[user_idx]) & order_arr[order_idx])
@@ -787,13 +864,10 @@ mlx5dr_action_fixup_stc_attr(struct mlx5dr_context *ctx,
 
 	switch (stc_attr->action_type) {
 	case MLX5_IFC_STC_ACTION_TYPE_JUMP_TO_STE_TABLE:
-		if (!is_mirror)
-			devx_obj = mlx5dr_pool_chunk_get_base_devx_obj(stc_attr->ste_table.ste_pool,
-								       &stc_attr->ste_table.ste);
-		else
-			devx_obj =
-			mlx5dr_pool_chunk_get_base_devx_obj_mirror(stc_attr->ste_table.ste_pool,
-								   &stc_attr->ste_table.ste);
+		devx_obj = mlx5dr_action_get_stc_obj_by_tbl_type(table_type,
+								 stc_attr->ste_table.ste_pool,
+								 &stc_attr->ste_table.ste,
+								 is_mirror);
 
 		*fixup_stc_attr = *stc_attr;
 		fixup_stc_attr->ste_table.ste_obj_id = devx_obj->id;
@@ -845,6 +919,19 @@ mlx5dr_action_fixup_stc_attr(struct mlx5dr_context *ctx,
 	return use_fixup;
 }
 
+static struct mlx5dr_devx_obj *
+mlx5dr_action_get_stc_obj_by_tbl_type(enum mlx5dr_table_type table_type,
+				      struct mlx5dr_pool *stc_pool,
+				      struct mlx5dr_pool_chunk *stc,
+				      bool is_mirror)
+{
+	if (table_type == MLX5DR_TABLE_TYPE_FDB_TX ||
+	    (is_mirror && table_type == MLX5DR_TABLE_TYPE_FDB)) /* Optimized ORIG in FDB_TX */
+		return mlx5dr_pool_chunk_get_base_devx_obj_mirror(stc_pool, stc);
+	else
+		return mlx5dr_pool_chunk_get_base_devx_obj(stc_pool, stc);
+}
+
 int mlx5dr_action_alloc_single_stc(struct mlx5dr_context *ctx,
 				   struct mlx5dr_cmd_stc_modify_attr *stc_attr,
 				   uint32_t table_type,
@@ -854,6 +941,7 @@ int mlx5dr_action_alloc_single_stc(struct mlx5dr_context *ctx,
 	struct mlx5dr_pool *stc_pool = ctx->stc_pool[table_type];
 	struct mlx5dr_cmd_stc_modify_attr fixup_stc_attr = {0};
 	struct mlx5dr_devx_obj *devx_obj_0;
+	enum mlx5dr_table_type type;
 	bool use_fixup;
 	int ret;
 
@@ -869,10 +957,13 @@ int mlx5dr_action_alloc_single_stc(struct mlx5dr_context *ctx,
 	if (!mlx5dr_context_cap_dynamic_reparse(ctx))
 		stc_attr->reparse_mode = MLX5_IFC_STC_REPARSE_IGNORE;
 
-	devx_obj_0 = mlx5dr_pool_chunk_get_base_devx_obj(stc_pool, stc);
+	type = (enum mlx5dr_table_type)table_type;
+	devx_obj_0 = mlx5dr_action_get_stc_obj_by_tbl_type(type, stc_pool, stc, false);
 
 	/* According to table/action limitation change the stc_attr */
-	use_fixup = mlx5dr_action_fixup_stc_attr(ctx, stc_attr, &fixup_stc_attr, table_type, false);
+	use_fixup = mlx5dr_action_fixup_stc_attr(ctx, stc_attr, &fixup_stc_attr,
+						 (enum mlx5dr_table_type)table_type,
+						 (table_type == MLX5DR_TABLE_TYPE_FDB_TX));
 	ret = mlx5dr_cmd_stc_modify(devx_obj_0, use_fixup ? &fixup_stc_attr : stc_attr);
 	if (ret) {
 		DR_LOG(ERR, "Failed to modify STC action_type %d tbl_type %d",
@@ -916,12 +1007,15 @@ void mlx5dr_action_free_single_stc(struct mlx5dr_context *ctx,
 	struct mlx5dr_pool *stc_pool = ctx->stc_pool[table_type];
 	struct mlx5dr_cmd_stc_modify_attr stc_attr = {0};
 	struct mlx5dr_devx_obj *devx_obj;
+	enum mlx5dr_table_type type;
 
 	/* Modify the STC not to point to an object */
 	stc_attr.action_type = MLX5_IFC_STC_ACTION_TYPE_DROP;
 	stc_attr.action_offset = MLX5DR_ACTION_OFFSET_HIT;
 	stc_attr.stc_offset = stc->offset;
-	devx_obj = mlx5dr_pool_chunk_get_base_devx_obj(stc_pool, stc);
+	type = (enum mlx5dr_table_type)table_type;
+	devx_obj = mlx5dr_action_get_stc_obj_by_tbl_type(type, stc_pool, stc, false);
+
 	mlx5dr_cmd_stc_modify(devx_obj, &stc_attr);
 
 	if (table_type == MLX5DR_TABLE_TYPE_FDB) {
@@ -1131,7 +1225,7 @@ mlx5dr_action_create_stcs(struct mlx5dr_action *action,
 						     MLX5DR_TABLE_TYPE_NIC_TX,
 						     &action->stc[MLX5DR_TABLE_TYPE_NIC_TX]);
 		if (ret)
-			goto free_nic_rx_stc;
+			goto free_stcs_rx;
 	}
 
 	/* Allocate STC for FDB */
@@ -1140,22 +1234,59 @@ mlx5dr_action_create_stcs(struct mlx5dr_action *action,
 						     MLX5DR_TABLE_TYPE_FDB,
 						     &action->stc[MLX5DR_TABLE_TYPE_FDB]);
 		if (ret)
-			goto free_nic_tx_stc;
+			goto free_stcs_tx;
+	}
+
+	/* Allocate STC for FDB-RX */
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_RX) {
+		ret = mlx5dr_action_alloc_single_stc(ctx, &stc_attr,
+						     MLX5DR_TABLE_TYPE_FDB_RX,
+						     &action->stc[MLX5DR_TABLE_TYPE_FDB_RX]);
+		if (ret)
+			goto free_stcs_fdb;
+	}
+
+	/* Allocate STC for FDB-TX */
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_TX) {
+		ret = mlx5dr_action_alloc_single_stc(ctx, &stc_attr,
+						     MLX5DR_TABLE_TYPE_FDB_TX,
+						     &action->stc[MLX5DR_TABLE_TYPE_FDB_TX]);
+		if (ret)
+			goto free_stcs_fdb_rx;
+	}
+
+	/* Allocate STC for FDB Unified */
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED) {
+		ret = mlx5dr_action_alloc_single_stc(ctx, &stc_attr,
+						     MLX5DR_TABLE_TYPE_FDB_UNIFIED,
+						     &action->stc[MLX5DR_TABLE_TYPE_FDB_UNIFIED]);
+		if (ret)
+			goto free_stcs_fdb_tx;
 	}
 
 	pthread_spin_unlock(&ctx->ctrl_lock);
 
 	return 0;
 
-free_nic_tx_stc:
+free_stcs_fdb_tx:
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_TX)
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB_TX,
+					      &action->stc[MLX5DR_TABLE_TYPE_FDB_TX]);
+free_stcs_fdb_rx:
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_RX)
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB_RX,
+					      &action->stc[MLX5DR_TABLE_TYPE_FDB_RX]);
+free_stcs_fdb:
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB)
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB,
+					      &action->stc[MLX5DR_TABLE_TYPE_FDB]);
+free_stcs_tx:
 	if (action->flags & MLX5DR_ACTION_FLAG_HWS_TX)
-		mlx5dr_action_free_single_stc(ctx,
-					      MLX5DR_TABLE_TYPE_NIC_TX,
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_NIC_TX,
 					      &action->stc[MLX5DR_TABLE_TYPE_NIC_TX]);
-free_nic_rx_stc:
+free_stcs_rx:
 	if (action->flags & MLX5DR_ACTION_FLAG_HWS_RX)
-		mlx5dr_action_free_single_stc(ctx,
-					      MLX5DR_TABLE_TYPE_NIC_RX,
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_NIC_RX,
 					      &action->stc[MLX5DR_TABLE_TYPE_NIC_RX]);
 out_err:
 	pthread_spin_unlock(&ctx->ctrl_lock);
@@ -1182,6 +1313,18 @@ mlx5dr_action_destroy_stcs(struct mlx5dr_action *action)
 		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB,
 					      &action->stc[MLX5DR_TABLE_TYPE_FDB]);
 
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_RX)
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB_RX,
+					      &action->stc[MLX5DR_TABLE_TYPE_FDB_RX]);
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_TX)
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB_TX,
+					      &action->stc[MLX5DR_TABLE_TYPE_FDB_TX]);
+
+	if (action->flags & MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED)
+		mlx5dr_action_free_single_stc(ctx, MLX5DR_TABLE_TYPE_FDB_UNIFIED,
+					      &action->stc[MLX5DR_TABLE_TYPE_FDB_UNIFIED]);
+
 	pthread_spin_unlock(&ctx->ctrl_lock);
 }
 
@@ -1198,7 +1341,10 @@ mlx5dr_action_is_hws_flags(uint32_t flags)
 {
 	return flags & (MLX5DR_ACTION_FLAG_HWS_RX |
 			MLX5DR_ACTION_FLAG_HWS_TX |
-			MLX5DR_ACTION_FLAG_HWS_FDB);
+			MLX5DR_ACTION_FLAG_HWS_FDB |
+			MLX5DR_ACTION_FLAG_HWS_FDB_RX |
+			MLX5DR_ACTION_FLAG_HWS_FDB_TX |
+			MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED);
 }
 
 static struct mlx5dr_action *
@@ -1336,9 +1482,13 @@ mlx5dr_action_create_dest_tir(struct mlx5dr_context *ctx,
 		return NULL;
 	}
 
-	if ((flags & MLX5DR_ACTION_FLAG_ROOT_FDB) ||
-	    (flags & MLX5DR_ACTION_FLAG_HWS_FDB && !ctx->caps->fdb_tir_stc)) {
-		DR_LOG(ERR, "TIR action not support on FDB");
+	if ((flags & (MLX5DR_ACTION_FLAG_ROOT_FDB |
+		      MLX5DR_ACTION_FLAG_HWS_FDB_TX |
+		      MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED)) ||
+	    ((flags & (MLX5DR_ACTION_FLAG_HWS_FDB |
+		       MLX5DR_ACTION_FLAG_HWS_FDB_RX)) &&
+	    !ctx->caps->fdb_tir_stc)) {
+		DR_LOG(ERR, "TIR action not support on FDB or FDB_TX or UNIFIED");
 		rte_errno = ENOTSUP;
 		return NULL;
 	}
@@ -1436,6 +1586,12 @@ mlx5dr_action_create_tag(struct mlx5dr_context *ctx,
 	struct mlx5dr_action *action;
 	int ret;
 
+	if (flags & (MLX5DR_ACTION_FLAG_HWS_FDB_TX | MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED)) {
+		DR_LOG(ERR, "TAG action not supported for UNIFIED or FDB_TX");
+		rte_errno = ENOTSUP;
+		return NULL;
+	}
+
 	action = mlx5dr_action_create_generic(ctx, flags, MLX5DR_ACTION_TYP_TAG);
 	if (!action)
 		return NULL;
@@ -1588,7 +1744,9 @@ mlx5dr_action_create_dest_vport(struct mlx5dr_context *ctx,
 	struct mlx5dr_action *action;
 	int ret;
 
-	if (!(flags & MLX5DR_ACTION_FLAG_HWS_FDB)) {
+	if (!(flags & (MLX5DR_ACTION_FLAG_HWS_FDB | MLX5DR_ACTION_FLAG_HWS_FDB_RX |
+		       MLX5DR_ACTION_FLAG_HWS_FDB_TX |
+		       MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED))) {
 		DR_LOG(ERR, "Vport action is supported for FDB only");
 		rte_errno = EINVAL;
 		return NULL;
@@ -2317,11 +2475,21 @@ mlx5dr_action_create_dest_array(struct mlx5dr_context *ctx,
 		return NULL;
 	}
 
-	if (flags == (MLX5DR_ACTION_FLAG_HWS_RX | MLX5DR_ACTION_FLAG_SHARED)) {
+	if (!(flags & MLX5DR_ACTION_FLAG_SHARED)) {
+		DR_LOG(ERR, "Action flags not supported, should include SHARED");
+		rte_errno = ENOTSUP;
+		return NULL;
+	}
+
+	flags = flags & ~MLX5DR_ACTION_FLAG_SHARED;
+
+	if (flags == MLX5DR_ACTION_FLAG_HWS_RX) {
 		ft_attr.type = FS_FT_NIC_RX;
 		ft_attr.level = MLX5_IFC_MULTI_PATH_FT_MAX_LEVEL - 1;
 		table_type = MLX5DR_TABLE_TYPE_NIC_RX;
-	} else if (flags == (MLX5DR_ACTION_FLAG_HWS_FDB | MLX5DR_ACTION_FLAG_SHARED)) {
+	} else if (flags & (MLX5DR_ACTION_FLAG_HWS_FDB | MLX5DR_ACTION_FLAG_HWS_FDB_RX |
+			    MLX5DR_ACTION_FLAG_HWS_FDB_TX |
+			    MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED)) {
 		ft_attr.type = FS_FT_FDB;
 		ft_attr.level = ctx->caps->fdb_ft.max_level - 1;
 		table_type = MLX5DR_TABLE_TYPE_FDB;
@@ -2363,7 +2531,7 @@ mlx5dr_action_create_dest_array(struct mlx5dr_context *ctx,
 				fte_attr.ignore_flow_level = 1;
 				break;
 			case MLX5DR_ACTION_TYP_MISS:
-				if (table_type != MLX5DR_TABLE_TYPE_FDB) {
+				if (!mlx5dr_table_is_fdb_any(table_type)) {
 					DR_LOG(ERR, "Miss action supported for FDB only");
 					rte_errno = ENOTSUP;
 					goto free_dest_list;
diff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h
index 8ce4ecd5ba..b779e578fd 100644
--- a/drivers/net/mlx5/hws/mlx5dr_action.h
+++ b/drivers/net/mlx5/hws/mlx5dr_action.h
@@ -160,7 +160,7 @@ struct mlx5dr_action_template {
 
 struct mlx5dr_action {
 	uint8_t type;
-	uint8_t flags;
+	uint16_t flags;
 	struct mlx5dr_context *ctx;
 	union {
 		struct {
-- 
2.21.0


  parent reply	other threads:[~2025-02-16 11:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-16 11:04 [PATCH 1/8] net/mlx5/hws: introduce capability for unified mode Hamdan Igbaria
2025-02-16 11:04 ` [PATCH 2/8] net/mlx5/hws: add new type to existing table-types Hamdan Igbaria
2025-02-16 11:04 ` [PATCH 3/8] net/mlx5/hws: context changes to support unified domain Hamdan Igbaria
2025-02-16 11:04 ` [PATCH 4/8] net/mlx5/hws: allow table creation from the new types Hamdan Igbaria
2025-02-16 11:04 ` [PATCH 5/8] net/mlx5/hws: matcher changes to support unified domain Hamdan Igbaria
2025-02-16 11:04 ` Hamdan Igbaria [this message]
2025-02-16 11:04 ` [PATCH 7/8] net/mlx5/hws: unified rule changes Hamdan Igbaria
2025-02-16 11:04 ` [PATCH 8/8] net/mlx5/hws: support debug information for new domains Hamdan Igbaria

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250216110414.10926-6-hamdani@nvidia.com \
    --to=hamdani@nvidia.com \
    --cc=bingz@nvidia.com \
    --cc=dev@dpdk.org \
    --cc=dsosnowski@nvidia.com \
    --cc=erezsh@nvidia.com \
    --cc=matan@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=suanmingm@nvidia.com \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).