From: Alex Vesker <valex@nvidia.com>
To: <valex@nvidia.com>, <viacheslavo@nvidia.com>,
<thomas@monjalon.net>, <suanmingm@nvidia.com>,
Matan Azrad <matan@nvidia.com>
Cc: <dev@dpdk.org>, <orika@nvidia.com>, Hamdan Igbaria <hamdani@nvidia.com>
Subject: [v6 17/18] net/mlx5/hws: Add HWS debug layer
Date: Thu, 20 Oct 2022 18:57:47 +0300 [thread overview]
Message-ID: <20221020155749.16643-18-valex@nvidia.com> (raw)
In-Reply-To: <20221020155749.16643-1-valex@nvidia.com>
From: Hamdan Igbaria <hamdani@nvidia.com>
The debug layer is used to generate a debug CSV file
containing details of the context, table, matcher, rules
and other useful debug information.
Signed-off-by: Hamdan Igbaria <hamdani@nvidia.com>
Signed-off-by: Alex Vesker <valex@nvidia.com>
---
drivers/net/mlx5/hws/mlx5dr_debug.c | 462 ++++++++++++++++++++++++++++
drivers/net/mlx5/hws/mlx5dr_debug.h | 28 ++
2 files changed, 490 insertions(+)
create mode 100644 drivers/net/mlx5/hws/mlx5dr_debug.c
create mode 100644 drivers/net/mlx5/hws/mlx5dr_debug.h
diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c
new file mode 100644
index 0000000000..890a761c48
--- /dev/null
+++ b/drivers/net/mlx5/hws/mlx5dr_debug.c
@@ -0,0 +1,462 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2022 NVIDIA Corporation & Affiliates
+ */
+
+#include "mlx5dr_internal.h"
+
+const char *mlx5dr_debug_action_type_str[] = {
+ [MLX5DR_ACTION_TYP_LAST] = "LAST",
+ [MLX5DR_ACTION_TYP_TNL_L2_TO_L2] = "TNL_L2_TO_L2",
+ [MLX5DR_ACTION_TYP_L2_TO_TNL_L2] = "L2_TO_TNL_L2",
+ [MLX5DR_ACTION_TYP_TNL_L3_TO_L2] = "TNL_L3_TO_L2",
+ [MLX5DR_ACTION_TYP_L2_TO_TNL_L3] = "L2_TO_TNL_L3",
+ [MLX5DR_ACTION_TYP_DROP] = "DROP",
+ [MLX5DR_ACTION_TYP_TIR] = "TIR",
+ [MLX5DR_ACTION_TYP_FT] = "FT",
+ [MLX5DR_ACTION_TYP_CTR] = "CTR",
+ [MLX5DR_ACTION_TYP_TAG] = "TAG",
+ [MLX5DR_ACTION_TYP_MODIFY_HDR] = "MODIFY_HDR",
+ [MLX5DR_ACTION_TYP_VPORT] = "VPORT",
+ [MLX5DR_ACTION_TYP_MISS] = "DEFAULT_MISS",
+ [MLX5DR_ACTION_TYP_POP_VLAN] = "POP_VLAN",
+ [MLX5DR_ACTION_TYP_PUSH_VLAN] = "PUSH_VLAN",
+ [MLX5DR_ACTION_TYP_ASO_METER] = "ASO_METER",
+ [MLX5DR_ACTION_TYP_ASO_CT] = "ASO_CT",
+};
+
+static_assert(ARRAY_SIZE(mlx5dr_debug_action_type_str) == MLX5DR_ACTION_TYP_MAX,
+ "Missing mlx5dr_debug_action_type_str");
+
+const char *mlx5dr_debug_action_type_to_str(enum mlx5dr_action_type action_type)
+{
+ return mlx5dr_debug_action_type_str[action_type];
+}
+
+static int
+mlx5dr_debug_dump_matcher_template_definer(FILE *f,
+ struct mlx5dr_match_template *mt)
+{
+ struct mlx5dr_definer *definer = mt->definer;
+ int i, ret;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,",
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_DEFINER,
+ (uint64_t)(uintptr_t)definer,
+ (uint64_t)(uintptr_t)mt,
+ definer->obj->id,
+ definer->type);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ for (i = 0; i < DW_SELECTORS; i++) {
+ ret = fprintf(f, "0x%x%s", definer->dw_selector[i],
+ (i == DW_SELECTORS - 1) ? "," : "-");
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+ }
+
+ for (i = 0; i < BYTE_SELECTORS; i++) {
+ ret = fprintf(f, "0x%x%s", definer->byte_selector[i],
+ (i == BYTE_SELECTORS - 1) ? "," : "-");
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+ }
+
+ for (i = 0; i < MLX5DR_JUMBO_TAG_SZ; i++) {
+ ret = fprintf(f, "%02x", definer->mask.jumbo[i]);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+ }
+
+ ret = fprintf(f, "\n");
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ return 0;
+}
+
+static int
+mlx5dr_debug_dump_matcher_match_template(FILE *f, struct mlx5dr_matcher *matcher)
+{
+ bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
+ int i, ret;
+
+ for (i = 0; i < matcher->num_of_mt; i++) {
+ struct mlx5dr_match_template *mt = matcher->mt[i];
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d\n",
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_MATCH_TEMPLATE,
+ (uint64_t)(uintptr_t)mt,
+ (uint64_t)(uintptr_t)matcher,
+ is_root ? 0 : mt->fc_sz,
+ mt->flags);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ if (!is_root) {
+ ret = mlx5dr_debug_dump_matcher_template_definer(f, mt);
+ if (ret)
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int
+mlx5dr_debug_dump_matcher_action_template(FILE *f, struct mlx5dr_matcher *matcher)
+{
+ bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
+ enum mlx5dr_action_type action_type;
+ int i, j, ret;
+
+ for (i = 0; i < matcher->num_of_at; i++) {
+ struct mlx5dr_action_template *at = matcher->at[i];
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d",
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_ACTION_TEMPLATE,
+ (uint64_t)(uintptr_t)at,
+ (uint64_t)(uintptr_t)matcher,
+ at->only_term ? 0 : 1,
+ is_root ? 0 : at->num_of_action_stes,
+ at->num_actions);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ for (j = 0; j < at->num_actions; j++) {
+ action_type = at->action_type_arr[j];
+ ret = fprintf(f, ",%s", mlx5dr_debug_action_type_to_str(action_type));
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+ }
+
+ fprintf(f, "\n");
+ }
+
+ return 0;
+}
+
+static int
+mlx5dr_debug_dump_matcher_attr(FILE *f, struct mlx5dr_matcher *matcher)
+{
+ struct mlx5dr_matcher_attr *attr = &matcher->attr;
+ int ret;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d,%d,%d\n",
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_ATTR,
+ (uint64_t)(uintptr_t)matcher,
+ attr->priority,
+ attr->mode,
+ attr->table.sz_row_log,
+ attr->table.sz_col_log,
+ attr->optimize_using_rule_idx,
+ attr->optimize_flow_src);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ return 0;
+}
+
+static int mlx5dr_debug_dump_matcher(FILE *f, struct mlx5dr_matcher *matcher)
+{
+ bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
+ enum mlx5dr_table_type tbl_type = matcher->tbl->type;
+ struct mlx5dr_devx_obj *ste_0, *ste_1 = NULL;
+ struct mlx5dr_pool_chunk *ste;
+ struct mlx5dr_pool *ste_pool;
+ int ret;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,0x%" PRIx64,
+ MLX5DR_DEBUG_RES_TYPE_MATCHER,
+ (uint64_t)(uintptr_t)matcher,
+ (uint64_t)(uintptr_t)matcher->tbl,
+ matcher->num_of_mt,
+ is_root ? 0 : matcher->end_ft->id,
+ matcher->col_matcher ? (uint64_t)(uintptr_t)matcher->col_matcher : 0);
+ if (ret < 0)
+ goto out_err;
+
+ ste = &matcher->match_ste.ste;
+ ste_pool = matcher->match_ste.pool;
+ if (ste_pool) {
+ ste_0 = mlx5dr_pool_chunk_get_base_devx_obj(ste_pool, ste);
+ if (tbl_type == MLX5DR_TABLE_TYPE_FDB)
+ ste_1 = mlx5dr_pool_chunk_get_base_devx_obj_mirror(ste_pool, ste);
+ } else {
+ ste_0 = NULL;
+ ste_1 = NULL;
+ }
+
+ ret = fprintf(f, ",%d,%d,%d,%d",
+ matcher->match_ste.rtc_0 ? matcher->match_ste.rtc_0->id : 0,
+ ste_0 ? (int)ste_0->id : -1,
+ matcher->match_ste.rtc_1 ? matcher->match_ste.rtc_1->id : 0,
+ ste_1 ? (int)ste_1->id : -1);
+ if (ret < 0)
+ goto out_err;
+
+ ste = &matcher->action_ste.ste;
+ ste_pool = matcher->action_ste.pool;
+ if (ste_pool) {
+ ste_0 = mlx5dr_pool_chunk_get_base_devx_obj(ste_pool, ste);
+ if (tbl_type == MLX5DR_TABLE_TYPE_FDB)
+ ste_1 = mlx5dr_pool_chunk_get_base_devx_obj_mirror(ste_pool, ste);
+ } else {
+ ste_0 = NULL;
+ ste_1 = NULL;
+ }
+
+ ret = fprintf(f, ",%d,%d,%d,%d\n",
+ matcher->action_ste.rtc_0 ? matcher->action_ste.rtc_0->id : 0,
+ ste_0 ? (int)ste_0->id : -1,
+ matcher->action_ste.rtc_1 ? matcher->action_ste.rtc_1->id : 0,
+ ste_1 ? (int)ste_1->id : -1);
+ if (ret < 0)
+ goto out_err;
+
+ ret = mlx5dr_debug_dump_matcher_attr(f, matcher);
+ if (ret)
+ return ret;
+
+ ret = mlx5dr_debug_dump_matcher_match_template(f, matcher);
+ if (ret)
+ return ret;
+
+ ret = mlx5dr_debug_dump_matcher_action_template(f, matcher);
+ if (ret)
+ return ret;
+
+ return 0;
+
+out_err:
+ rte_errno = EINVAL;
+ return rte_errno;
+}
+
+static int mlx5dr_debug_dump_table(FILE *f, struct mlx5dr_table *tbl)
+{
+ bool is_root = tbl->level == MLX5DR_ROOT_LEVEL;
+ struct mlx5dr_matcher *matcher;
+ int ret;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d,%d\n",
+ MLX5DR_DEBUG_RES_TYPE_TABLE,
+ (uint64_t)(uintptr_t)tbl,
+ (uint64_t)(uintptr_t)tbl->ctx,
+ is_root ? 0 : tbl->ft->id,
+ tbl->type,
+ is_root ? 0 : tbl->fw_ft_type,
+ tbl->level);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ LIST_FOREACH(matcher, &tbl->head, next) {
+ ret = mlx5dr_debug_dump_matcher(f, matcher);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static int
+mlx5dr_debug_dump_context_send_engine(FILE *f, struct mlx5dr_context *ctx)
+{
+ struct mlx5dr_send_engine *send_queue;
+ int ret, i, j;
+
+ for (i = 0; i < (int)ctx->queues; i++) {
+ send_queue = &ctx->send_queue[i];
+ ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_ENGINE,
+ (uint64_t)(uintptr_t)ctx,
+ i,
+ send_queue->used_entries,
+ send_queue->th_entries,
+ send_queue->rings,
+ send_queue->num_entries,
+ send_queue->err,
+ send_queue->completed.ci,
+ send_queue->completed.pi,
+ send_queue->completed.mask);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ for (j = 0; j < MLX5DR_NUM_SEND_RINGS; j++) {
+ struct mlx5dr_send_ring *send_ring = &send_queue->send_ring[j];
+ struct mlx5dr_send_ring_cq *cq = &send_ring->send_cq;
+ struct mlx5dr_send_ring_sq *sq = &send_ring->send_sq;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_RING,
+ (uint64_t)(uintptr_t)ctx,
+ j,
+ i,
+ cq->cqn,
+ cq->cons_index,
+ cq->ncqe_mask,
+ cq->buf_sz,
+ cq->ncqe,
+ cq->cqe_log_sz,
+ cq->poll_wqe,
+ cq->cqe_sz,
+ sq->sqn,
+ sq->obj->id,
+ sq->cur_post,
+ sq->buf_mask);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int mlx5dr_debug_dump_context_caps(FILE *f, struct mlx5dr_context *ctx)
+{
+ struct mlx5dr_cmd_query_caps *caps = ctx->caps;
+ int ret;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",%s,%d,%d,%d,%d,",
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_CAPS,
+ (uint64_t)(uintptr_t)ctx,
+ caps->fw_ver,
+ caps->wqe_based_update,
+ caps->ste_format,
+ caps->ste_alloc_log_max,
+ caps->log_header_modify_argument_max_alloc);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ ret = fprintf(f, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
+ caps->flex_protocols,
+ caps->rtc_reparse_mode,
+ caps->rtc_index_mode,
+ caps->ste_alloc_log_gran,
+ caps->stc_alloc_log_max,
+ caps->stc_alloc_log_gran,
+ caps->rtc_log_depth_max,
+ caps->format_select_gtpu_dw_0,
+ caps->format_select_gtpu_dw_1,
+ caps->format_select_gtpu_dw_2,
+ caps->format_select_gtpu_ext_dw_0,
+ caps->nic_ft.max_level,
+ caps->nic_ft.reparse,
+ caps->fdb_ft.max_level,
+ caps->fdb_ft.reparse,
+ caps->log_header_modify_argument_granularity);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ return 0;
+}
+
+static int mlx5dr_debug_dump_context_attr(FILE *f, struct mlx5dr_context *ctx)
+{
+ int ret;
+
+ ret = fprintf(f, "%u,0x%" PRIx64 ",%d,%zu,%d\n",
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_ATTR,
+ (uint64_t)(uintptr_t)ctx,
+ ctx->pd_num,
+ ctx->queues,
+ ctx->send_queue->num_entries);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ return 0;
+}
+
+static int mlx5dr_debug_dump_context_info(FILE *f, struct mlx5dr_context *ctx)
+{
+ int ret;
+
+ ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%s,%s\n",
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT,
+ (uint64_t)(uintptr_t)ctx,
+ ctx->flags & MLX5DR_CONTEXT_FLAG_HWS_SUPPORT,
+ mlx5_glue->get_device_name(ctx->ibv_ctx->device),
+ DEBUG_VERSION);
+ if (ret < 0) {
+ rte_errno = EINVAL;
+ return rte_errno;
+ }
+
+ ret = mlx5dr_debug_dump_context_attr(f, ctx);
+ if (ret)
+ return ret;
+
+ ret = mlx5dr_debug_dump_context_caps(f, ctx);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int mlx5dr_debug_dump_context(FILE *f, struct mlx5dr_context *ctx)
+{
+ struct mlx5dr_table *tbl;
+ int ret;
+
+ ret = mlx5dr_debug_dump_context_info(f, ctx);
+ if (ret)
+ return ret;
+
+ ret = mlx5dr_debug_dump_context_send_engine(f, ctx);
+ if (ret)
+ return ret;
+
+ LIST_FOREACH(tbl, &ctx->head, next) {
+ ret = mlx5dr_debug_dump_table(f, tbl);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+int mlx5dr_debug_dump(struct mlx5dr_context *ctx, FILE *f)
+{
+ int ret;
+
+ if (!f || !ctx) {
+ rte_errno = EINVAL;
+ return -rte_errno;
+ }
+
+ pthread_spin_lock(&ctx->ctrl_lock);
+ ret = mlx5dr_debug_dump_context(f, ctx);
+ pthread_spin_unlock(&ctx->ctrl_lock);
+
+ return -ret;
+}
diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.h b/drivers/net/mlx5/hws/mlx5dr_debug.h
new file mode 100644
index 0000000000..cf00170f7d
--- /dev/null
+++ b/drivers/net/mlx5/hws/mlx5dr_debug.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2022 NVIDIA Corporation & Affiliates
+ */
+
+#ifndef MLX5DR_DEBUG_H_
+#define MLX5DR_DEBUG_H_
+
+#define DEBUG_VERSION "1.0.DPDK"
+
+enum mlx5dr_debug_res_type {
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT = 4000,
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_ATTR = 4001,
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_CAPS = 4002,
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_ENGINE = 4003,
+ MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_RING = 4004,
+
+ MLX5DR_DEBUG_RES_TYPE_TABLE = 4100,
+
+ MLX5DR_DEBUG_RES_TYPE_MATCHER = 4200,
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_ATTR = 4201,
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_MATCH_TEMPLATE = 4202,
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_ACTION_TEMPLATE = 4204,
+ MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_DEFINER = 4203,
+};
+
+const char *mlx5dr_debug_action_type_to_str(enum mlx5dr_action_type action_type);
+
+#endif /* MLX5DR_DEBUG_H_ */
--
2.18.1
next prev parent reply other threads:[~2022-10-20 16:01 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 19:03 [v1 00/19] net/mlx5: Add HW steering low level support Alex Vesker
2022-09-22 19:03 ` [v1 01/19] net/mlx5: split flow item translation Alex Vesker
2022-09-22 19:03 ` [v1 02/19] net/mlx5: split flow item matcher and value translation Alex Vesker
2022-09-22 19:03 ` [v1 03/19] net/mlx5: add hardware steering item translation function Alex Vesker
2022-09-22 19:03 ` [v1 04/19] net/mlx5: add port to metadata conversion Alex Vesker
2022-09-22 19:03 ` [v1 05/19] common/mlx5: query set capability of registers Alex Vesker
2022-09-22 19:03 ` [v1 06/19] net/mlx5: provide the available tag registers Alex Vesker
2022-09-22 19:03 ` [v1 07/19] net/mlx5: Add additional glue functions for HWS Alex Vesker
2022-09-22 19:03 ` [v1 08/19] net/mlx5: Remove stub HWS support Alex Vesker
2022-09-22 19:03 ` [v1 09/19] net/mlx5/hws: Add HWS command layer Alex Vesker
2022-09-22 19:03 ` [v1 10/19] net/mlx5/hws: Add HWS pool and buddy Alex Vesker
2022-09-22 19:03 ` [v1 11/19] net/mlx5/hws: Add HWS send layer Alex Vesker
2022-09-22 19:03 ` [v1 12/19] net/mlx5/hws: Add HWS definer layer Alex Vesker
2022-09-22 19:03 ` [v1 13/19] net/mlx5/hws: Add HWS context object Alex Vesker
2022-09-22 19:03 ` [v1 14/19] net/mlx5/hws: Add HWS table object Alex Vesker
2022-09-22 19:03 ` [v1 15/19] net/mlx5/hws: Add HWS matcher object Alex Vesker
2022-09-22 19:03 ` [v1 16/19] net/mlx5/hws: Add HWS rule object Alex Vesker
2022-09-22 19:03 ` [v1 17/19] net/mlx5/hws: Add HWS action object Alex Vesker
2022-09-22 19:03 ` [v1 18/19] net/mlx5/hws: Add HWS debug layer Alex Vesker
2022-09-22 19:03 ` [v1 19/19] net/mlx5/hws: Enable HWS Alex Vesker
2022-10-06 15:03 ` [v2 00/19] net/mlx5: Add HW steering low level support Alex Vesker
2022-10-06 15:03 ` [v2 01/19] net/mlx5: split flow item translation Alex Vesker
2022-10-06 15:03 ` [v2 02/19] net/mlx5: split flow item matcher and value translation Alex Vesker
2022-10-06 15:03 ` [v2 03/19] net/mlx5: add hardware steering item translation function Alex Vesker
2022-10-06 15:03 ` [v2 04/19] net/mlx5: add port to metadata conversion Alex Vesker
2022-10-06 15:03 ` [v2 05/19] common/mlx5: query set capability of registers Alex Vesker
2022-10-06 15:03 ` [v2 06/19] net/mlx5: provide the available tag registers Alex Vesker
2022-10-06 15:03 ` [v2 07/19] net/mlx5: Add additional glue functions for HWS Alex Vesker
2022-10-06 15:03 ` [v2 08/19] net/mlx5: Remove stub HWS support Alex Vesker
2022-10-06 15:03 ` [v2 09/19] net/mlx5/hws: Add HWS command layer Alex Vesker
2022-10-06 15:03 ` [v2 10/19] net/mlx5/hws: Add HWS pool and buddy Alex Vesker
2022-10-06 15:03 ` [v2 11/19] net/mlx5/hws: Add HWS send layer Alex Vesker
2022-10-06 15:03 ` [v2 12/19] net/mlx5/hws: Add HWS definer layer Alex Vesker
2022-10-06 15:03 ` [v2 13/19] net/mlx5/hws: Add HWS context object Alex Vesker
2022-10-06 15:03 ` [v2 14/19] net/mlx5/hws: Add HWS table object Alex Vesker
2022-10-06 15:03 ` [v2 15/19] net/mlx5/hws: Add HWS matcher object Alex Vesker
2022-10-06 15:03 ` [v2 16/19] net/mlx5/hws: Add HWS rule object Alex Vesker
2022-10-06 15:03 ` [v2 17/19] net/mlx5/hws: Add HWS action object Alex Vesker
2022-10-06 15:03 ` [v2 18/19] net/mlx5/hws: Add HWS debug layer Alex Vesker
2022-10-06 15:03 ` [v2 19/19] net/mlx5/hws: Enable HWS Alex Vesker
2022-10-14 11:48 ` [v3 00/18] net/mlx5: Add HW steering low level support Alex Vesker
2022-10-14 11:48 ` [v3 01/18] net/mlx5: split flow item translation Alex Vesker
2022-10-14 11:48 ` [v3 02/18] net/mlx5: split flow item matcher and value translation Alex Vesker
2022-10-14 11:48 ` [v3 03/18] net/mlx5: add hardware steering item translation function Alex Vesker
2022-10-14 11:48 ` [v3 04/18] net/mlx5: add port to metadata conversion Alex Vesker
2022-10-14 11:48 ` [v3 05/18] common/mlx5: query set capability of registers Alex Vesker
2022-10-14 11:48 ` [v3 06/18] net/mlx5: provide the available tag registers Alex Vesker
2022-10-14 11:48 ` [v3 07/18] net/mlx5: Add additional glue functions for HWS Alex Vesker
2022-10-14 11:48 ` [v3 08/18] net/mlx5/hws: Add HWS command layer Alex Vesker
2022-10-14 11:48 ` [v3 09/18] net/mlx5/hws: Add HWS pool and buddy Alex Vesker
2022-10-14 11:48 ` [v3 10/18] net/mlx5/hws: Add HWS send layer Alex Vesker
2022-10-14 11:48 ` [v3 11/18] net/mlx5/hws: Add HWS definer layer Alex Vesker
2022-10-14 11:48 ` [v3 12/18] net/mlx5/hws: Add HWS context object Alex Vesker
2022-10-14 11:48 ` [v3 13/18] net/mlx5/hws: Add HWS table object Alex Vesker
2022-10-14 11:48 ` [v3 14/18] net/mlx5/hws: Add HWS matcher object Alex Vesker
2022-10-14 11:48 ` [v3 15/18] net/mlx5/hws: Add HWS rule object Alex Vesker
2022-10-14 11:48 ` [v3 16/18] net/mlx5/hws: Add HWS action object Alex Vesker
2022-10-14 11:48 ` [v3 17/18] net/mlx5/hws: Add HWS debug layer Alex Vesker
2022-10-14 11:48 ` [v3 18/18] net/mlx5/hws: Enable HWS Alex Vesker
2022-10-19 14:42 ` [v4 00/18] net/mlx5: Add HW steering low level support Alex Vesker
2022-10-19 14:42 ` [v4 01/18] net/mlx5: split flow item translation Alex Vesker
2022-10-19 14:42 ` [v4 02/18] net/mlx5: split flow item matcher and value translation Alex Vesker
2022-10-19 14:42 ` [v4 03/18] net/mlx5: add hardware steering item translation function Alex Vesker
2022-10-19 14:42 ` [v4 04/18] net/mlx5: add port to metadata conversion Alex Vesker
2022-10-19 14:42 ` [v4 05/18] common/mlx5: query set capability of registers Alex Vesker
2022-10-19 14:42 ` [v4 06/18] net/mlx5: provide the available tag registers Alex Vesker
2022-10-19 14:42 ` [v4 07/18] net/mlx5: Add additional glue functions for HWS Alex Vesker
2022-10-19 14:42 ` [v4 08/18] net/mlx5/hws: Add HWS command layer Alex Vesker
2022-10-19 14:42 ` [v4 09/18] net/mlx5/hws: Add HWS pool and buddy Alex Vesker
2022-10-19 14:42 ` [v4 10/18] net/mlx5/hws: Add HWS send layer Alex Vesker
2022-10-19 14:42 ` [v4 11/18] net/mlx5/hws: Add HWS definer layer Alex Vesker
2022-10-19 14:42 ` [v4 12/18] net/mlx5/hws: Add HWS context object Alex Vesker
2022-10-19 14:42 ` [v4 13/18] net/mlx5/hws: Add HWS table object Alex Vesker
2022-10-19 14:42 ` [v4 14/18] net/mlx5/hws: Add HWS matcher object Alex Vesker
2022-10-19 14:42 ` [v4 15/18] net/mlx5/hws: Add HWS rule object Alex Vesker
2022-10-19 14:42 ` [v4 16/18] net/mlx5/hws: Add HWS action object Alex Vesker
2022-10-19 14:42 ` [v4 17/18] net/mlx5/hws: Add HWS debug layer Alex Vesker
2022-10-19 14:42 ` [v4 18/18] net/mlx5/hws: Enable HWS Alex Vesker
2022-10-19 20:57 ` [v5 00/18] net/mlx5: Add HW steering low level support Alex Vesker
2022-10-19 20:57 ` [v5 01/18] net/mlx5: split flow item translation Alex Vesker
2022-10-19 20:57 ` [v5 02/18] net/mlx5: split flow item matcher and value translation Alex Vesker
2022-10-19 20:57 ` [v5 03/18] net/mlx5: add hardware steering item translation function Alex Vesker
2022-10-19 20:57 ` [v5 04/18] net/mlx5: add port to metadata conversion Alex Vesker
2022-10-19 20:57 ` [v5 05/18] common/mlx5: query set capability of registers Alex Vesker
2022-10-19 20:57 ` [v5 06/18] net/mlx5: provide the available tag registers Alex Vesker
2022-10-19 20:57 ` [v5 07/18] net/mlx5: Add additional glue functions for HWS Alex Vesker
2022-10-19 20:57 ` [v5 08/18] net/mlx5/hws: Add HWS command layer Alex Vesker
2022-10-19 20:57 ` [v5 09/18] net/mlx5/hws: Add HWS pool and buddy Alex Vesker
2022-10-19 20:57 ` [v5 10/18] net/mlx5/hws: Add HWS send layer Alex Vesker
2022-10-19 20:57 ` [v5 11/18] net/mlx5/hws: Add HWS definer layer Alex Vesker
2022-10-19 20:57 ` [v5 12/18] net/mlx5/hws: Add HWS context object Alex Vesker
2022-10-19 20:57 ` [v5 13/18] net/mlx5/hws: Add HWS table object Alex Vesker
2022-10-19 20:57 ` [v5 14/18] net/mlx5/hws: Add HWS matcher object Alex Vesker
2022-10-19 20:57 ` [v5 15/18] net/mlx5/hws: Add HWS rule object Alex Vesker
2022-10-19 20:57 ` [v5 16/18] net/mlx5/hws: Add HWS action object Alex Vesker
2022-10-19 20:57 ` [v5 17/18] net/mlx5/hws: Add HWS debug layer Alex Vesker
2022-10-19 20:57 ` [v5 18/18] net/mlx5/hws: Enable HWS Alex Vesker
2022-10-20 15:57 ` [v6 00/18] net/mlx5: Add HW steering low level support Alex Vesker
2022-10-20 15:57 ` [v6 01/18] net/mlx5: split flow item translation Alex Vesker
2022-10-24 6:47 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 02/18] net/mlx5: split flow item matcher and value translation Alex Vesker
2022-10-24 6:49 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 03/18] net/mlx5: add hardware steering item translation function Alex Vesker
2022-10-24 6:50 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 04/18] net/mlx5: add port to metadata conversion Alex Vesker
2022-10-24 6:50 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 05/18] common/mlx5: query set capability of registers Alex Vesker
2022-10-24 6:50 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 06/18] net/mlx5: provide the available tag registers Alex Vesker
2022-10-24 6:51 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 07/18] net/mlx5: Add additional glue functions for HWS Alex Vesker
2022-10-24 6:52 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 08/18] net/mlx5/hws: Add HWS command layer Alex Vesker
2022-10-24 6:52 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 09/18] net/mlx5/hws: Add HWS pool and buddy Alex Vesker
2022-10-24 6:52 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 10/18] net/mlx5/hws: Add HWS send layer Alex Vesker
2022-10-24 6:53 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 11/18] net/mlx5/hws: Add HWS definer layer Alex Vesker
2022-10-24 6:53 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 12/18] net/mlx5/hws: Add HWS context object Alex Vesker
2022-10-24 6:53 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 13/18] net/mlx5/hws: Add HWS table object Alex Vesker
2022-10-24 6:54 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 14/18] net/mlx5/hws: Add HWS matcher object Alex Vesker
2022-10-24 6:54 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 15/18] net/mlx5/hws: Add HWS rule object Alex Vesker
2022-10-24 6:54 ` Slava Ovsiienko
2022-10-20 15:57 ` [v6 16/18] net/mlx5/hws: Add HWS action object Alex Vesker
2022-10-20 15:57 ` Alex Vesker [this message]
2022-10-24 6:54 ` [v6 17/18] net/mlx5/hws: Add HWS debug layer Slava Ovsiienko
2022-10-20 15:57 ` [v6 18/18] net/mlx5/hws: Enable HWS Alex Vesker
2022-10-24 6:54 ` Slava Ovsiienko
2022-10-24 10:56 ` [v6 00/18] net/mlx5: Add HW steering low level support Raslan Darawsheh
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=20221020155749.16643-18-valex@nvidia.com \
--to=valex@nvidia.com \
--cc=dev@dpdk.org \
--cc=hamdani@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).