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
next prev 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).