get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/91587/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 91587,
    "url": "https://patches.dpdk.org/api/patches/91587/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210415151135.2098674-11-lizh@nvidia.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20210415151135.2098674-11-lizh@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210415151135.2098674-11-lizh@nvidia.com",
    "date": "2021-04-15T15:11:30",
    "name": "[v5,10/14] net/mlx5: initialize the flow meter ASO SQ",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "17581a82461ad2ffc2bb3ff66e55bf5da5b2c1e3",
    "submitter": {
        "id": 1967,
        "url": "https://patches.dpdk.org/api/people/1967/?format=api",
        "name": "Li Zhang",
        "email": "lizh@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "https://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210415151135.2098674-11-lizh@nvidia.com/mbox/",
    "series": [
        {
            "id": 16417,
            "url": "https://patches.dpdk.org/api/series/16417/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=16417",
            "date": "2021-04-15T15:11:20",
            "name": "Add ASO meter support in MLX5 PMD",
            "version": 5,
            "mbox": "https://patches.dpdk.org/series/16417/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/91587/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/91587/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D8CDBA0C3F;\n\tThu, 15 Apr 2021 17:12:51 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3072C162338;\n\tThu, 15 Apr 2021 17:12:03 +0200 (CEST)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by mails.dpdk.org (Postfix) with ESMTP id 6286D162304\n for <dev@dpdk.org>; Thu, 15 Apr 2021 17:11:51 +0200 (CEST)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n lizh@nvidia.com)\n with SMTP; 15 Apr 2021 18:11:47 +0300",
            "from nvidia.com (c-235-17-1-009.mtl.labs.mlnx [10.235.17.9])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 13FFBjPP032677;\n Thu, 15 Apr 2021 18:11:47 +0300"
        ],
        "From": "Li Zhang <lizh@nvidia.com>",
        "To": "dekelp@nvidia.com, orika@nvidia.com, viacheslavo@nvidia.com,\n matan@nvidia.com, shahafs@nvidia.com",
        "Cc": "dev@dpdk.org, thomas@monjalon.net, rasland@nvidia.com, roniba@nvidia.com",
        "Date": "Thu, 15 Apr 2021 18:11:30 +0300",
        "Message-Id": "<20210415151135.2098674-11-lizh@nvidia.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20210415151135.2098674-1-lizh@nvidia.com>",
        "References": "<20210331073632.1443011-1-lizh@nvidia.com>\n <20210415151135.2098674-1-lizh@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v5 10/14] net/mlx5: initialize the flow meter ASO\n SQ",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Initialize the flow meter ASO SQ WQEs with\nall the constant data that should not be updated\nper enqueue operation.\n\nSigned-off-by: Li Zhang <lizh@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n drivers/net/mlx5/linux/mlx5_os.c              | 16 ++++\n drivers/net/mlx5/meson.build                  |  2 +-\n drivers/net/mlx5/mlx5.c                       | 68 ++++++++++++-\n drivers/net/mlx5/mlx5.h                       | 22 +++--\n drivers/net/mlx5/mlx5_flow.h                  |  4 +-\n .../mlx5/{mlx5_flow_age.c => mlx5_flow_aso.c} | 96 ++++++++++++++++---\n drivers/net/mlx5/mlx5_flow_dv.c               |  7 +-\n drivers/net/mlx5/mlx5_flow_meter.c            |  7 +-\n 8 files changed, 190 insertions(+), 32 deletions(-)\n rename drivers/net/mlx5/{mlx5_flow_age.c => mlx5_flow_aso.c} (85%)",
    "diff": "diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c\nindex ad43141e47..336cdbe3a8 100644\n--- a/drivers/net/mlx5/linux/mlx5_os.c\n+++ b/drivers/net/mlx5/linux/mlx5_os.c\n@@ -1290,6 +1290,22 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,\n \t\t\t\t\tpriv->mtr_color_reg);\n \t\t\t}\n \t\t}\n+\t\tif (config->hca_attr.qos.sup &&\n+\t\t\tconfig->hca_attr.qos.flow_meter_aso_sup) {\n+\t\t\tuint32_t log_obj_size =\n+\t\t\t\trte_log2_u32(MLX5_ASO_MTRS_PER_POOL >> 1);\n+\t\t\tif (log_obj_size >=\n+\t\t\tconfig->hca_attr.qos.log_meter_aso_granularity &&\n+\t\t\tlog_obj_size <=\n+\t\t\tconfig->hca_attr.qos.log_meter_aso_max_alloc) {\n+\t\t\t\tsh->meter_aso_en = 1;\n+\t\t\t\terr = mlx5_aso_flow_mtrs_mng_init(priv);\n+\t\t\t\tif (err) {\n+\t\t\t\t\terr = -err;\n+\t\t\t\t\tgoto error;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n #endif\n #ifdef HAVE_MLX5_DR_CREATE_ACTION_ASO\n \t\tif (config->hca_attr.flow_hit_aso &&\ndiff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build\nindex 59afd3f645..30080b0508 100644\n--- a/drivers/net/mlx5/meson.build\n+++ b/drivers/net/mlx5/meson.build\n@@ -15,7 +15,7 @@ sources = files(\n \t'mlx5_flow.c',\n \t'mlx5_flow_meter.c',\n \t'mlx5_flow_dv.c',\n-        'mlx5_flow_age.c',\n+\t'mlx5_flow_aso.c',\n \t'mlx5_mac.c',\n \t'mlx5_mr.c',\n \t'mlx5_rss.c',\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex 69dcb2d760..0c6d4e34c9 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -403,7 +403,7 @@ mlx5_flow_aso_age_mng_init(struct mlx5_dev_ctx_shared *sh)\n \t\trte_errno = ENOMEM;\n \t\treturn -ENOMEM;\n \t}\n-\terr = mlx5_aso_queue_init(sh);\n+\terr = mlx5_aso_queue_init(sh, ASO_OPC_MOD_FLOW_HIT);\n \tif (err) {\n \t\tmlx5_free(sh->aso_age_mng);\n \t\treturn -1;\n@@ -425,8 +425,8 @@ mlx5_flow_aso_age_mng_close(struct mlx5_dev_ctx_shared *sh)\n {\n \tint i, j;\n \n-\tmlx5_aso_queue_stop(sh);\n-\tmlx5_aso_queue_uninit(sh);\n+\tmlx5_aso_flow_hit_queue_poll_stop(sh);\n+\tmlx5_aso_queue_uninit(sh, ASO_OPC_MOD_FLOW_HIT);\n \tif (sh->aso_age_mng->pools) {\n \t\tstruct mlx5_aso_age_pool *pool;\n \n@@ -564,6 +564,66 @@ mlx5_flow_counters_mng_close(struct mlx5_dev_ctx_shared *sh)\n \tmemset(&sh->cmng, 0, sizeof(sh->cmng));\n }\n \n+/**\n+ * Initialize the aso flow meters management structure.\n+ *\n+ * @param[in] sh\n+ *   Pointer to mlx5_dev_ctx_shared object to free\n+ */\n+int\n+mlx5_aso_flow_mtrs_mng_init(struct mlx5_priv *priv)\n+{\n+\tif (!priv->mtr_idx_tbl) {\n+\t\tpriv->mtr_idx_tbl = mlx5_l3t_create(MLX5_L3T_TYPE_DWORD);\n+\t\tif (!priv->mtr_idx_tbl) {\n+\t\t\tDRV_LOG(ERR, \"fail to create meter lookup table.\");\n+\t\t\trte_errno = ENOMEM;\n+\t\t\treturn -ENOMEM;\n+\t\t}\n+\t}\n+\tif (!priv->sh->mtrmng) {\n+\t\tpriv->sh->mtrmng = mlx5_malloc(MLX5_MEM_ZERO,\n+\t\t\tsizeof(*priv->sh->mtrmng),\n+\t\t\tRTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n+\t\tif (!priv->sh->mtrmng) {\n+\t\t\tDRV_LOG(ERR, \"mlx5_aso_mtr_pools_mng allocation was failed.\");\n+\t\t\trte_errno = ENOMEM;\n+\t\t\treturn -ENOMEM;\n+\t\t}\n+\t\trte_spinlock_init(&priv->sh->mtrmng->mtrsl);\n+\t\tLIST_INIT(&priv->sh->mtrmng->meters);\n+\t}\n+\treturn 0;\n+}\n+\n+/**\n+ * Close and release all the resources of\n+ * the ASO flow meter management structure.\n+ *\n+ * @param[in] sh\n+ *   Pointer to mlx5_dev_ctx_shared object to free.\n+ */\n+static void\n+mlx5_aso_flow_mtrs_mng_close(struct mlx5_dev_ctx_shared *sh)\n+{\n+\tstruct mlx5_aso_mtr_pool *mtr_pool;\n+\tstruct mlx5_aso_mtr_pools_mng *mtrmng = sh->mtrmng;\n+\tuint32_t idx;\n+\n+\tmlx5_aso_queue_uninit(sh, ASO_OPC_MOD_POLICER);\n+\tidx = mtrmng->n_valid;\n+\twhile (idx--) {\n+\t\tmtr_pool = mtrmng->pools[idx];\n+\t\tclaim_zero(mlx5_devx_cmd_destroy\n+\t\t\t\t\t\t(mtr_pool->devx_obj));\n+\t\tmtrmng->n_valid--;\n+\t\tmlx5_free(mtr_pool);\n+\t}\n+\tmlx5_free(sh->mtrmng->pools);\n+\tmlx5_free(sh->mtrmng);\n+\tsh->mtrmng = NULL;\n+}\n+\n /* Send FLOW_AGED event if needed. */\n void\n mlx5_age_event_prepare(struct mlx5_dev_ctx_shared *sh)\n@@ -1113,6 +1173,8 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)\n \t\tmlx5_flow_aso_age_mng_close(sh);\n \t\tsh->aso_age_mng = NULL;\n \t}\n+\tif (sh->mtrmng)\n+\t\tmlx5_aso_flow_mtrs_mng_close(sh);\n \tmlx5_flow_ipool_destroy(sh);\n \tmlx5_os_dev_shared_handler_uninstall(sh);\n \tif (sh->cnt_id_tbl) {\ndiff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex 29fdb14e15..2976105210 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -482,8 +482,13 @@ struct mlx5_aso_devx_mr {\n };\n \n struct mlx5_aso_sq_elem {\n-\tstruct mlx5_aso_age_pool *pool;\n-\tuint16_t burst_size;\n+\tunion {\n+\t\tstruct {\n+\t\t\tstruct mlx5_aso_age_pool *pool;\n+\t\t\tuint16_t burst_size;\n+\t\t};\n+\t\tstruct mlx5_aso_mtr *mtr;\n+\t};\n };\n \n struct mlx5_aso_sq {\n@@ -755,7 +760,6 @@ struct mlx5_aso_mtr_pools_mng {\n \tvolatile uint16_t n_valid; /* Number of valid pools. */\n \tuint16_t n; /* Number of pools. */\n \trte_spinlock_t mtrsl; /* The ASO flow meter free list lock. */\n-\tstruct mlx5_l3t_tbl *mtr_idx_tbl; /* Meter index lookup table. */\n \tstruct aso_meter_list meters; /* Free ASO flow meter list. */\n \tstruct mlx5_aso_sq sq; /*SQ using by ASO flow meter. */\n \tstruct mlx5_aso_mtr_pool **pools; /* ASO flow meter pool array. */\n@@ -1186,6 +1190,7 @@ struct mlx5_priv {\n \tuint8_t mtr_color_reg; /* Meter color match REG_C. */\n \tstruct mlx5_mtr_profiles flow_meter_profiles; /* MTR profile list. */\n \tstruct mlx5_legacy_flow_meters flow_meters; /* MTR list. */\n+\tstruct mlx5_l3t_tbl *mtr_idx_tbl; /* Meter index lookup table. */\n \tuint8_t skip_default_rss_reta; /* Skip configuration of default reta. */\n \tuint8_t fdb_def_rule; /* Whether fdb jump to table 1 is configured. */\n \tstruct mlx5_mp_id mp_id; /* ID of a multi-process process */\n@@ -1249,6 +1254,7 @@ int mlx5_hairpin_cap_get(struct rte_eth_dev *dev,\n bool mlx5_flex_parser_ecpri_exist(struct rte_eth_dev *dev);\n int mlx5_flex_parser_ecpri_alloc(struct rte_eth_dev *dev);\n int mlx5_flow_aso_age_mng_init(struct mlx5_dev_ctx_shared *sh);\n+int mlx5_aso_flow_mtrs_mng_init(struct mlx5_priv *priv);\n \n /* mlx5_ethdev.c */\n \n@@ -1519,9 +1525,11 @@ eth_tx_burst_t mlx5_select_tx_function(struct rte_eth_dev *dev);\n \n /* mlx5_flow_aso.c */\n \n-int mlx5_aso_queue_init(struct mlx5_dev_ctx_shared *sh);\n-int mlx5_aso_queue_start(struct mlx5_dev_ctx_shared *sh);\n-int mlx5_aso_queue_stop(struct mlx5_dev_ctx_shared *sh);\n-void mlx5_aso_queue_uninit(struct mlx5_dev_ctx_shared *sh);\n+int mlx5_aso_queue_init(struct mlx5_dev_ctx_shared *sh,\n+\t\tenum mlx5_access_aso_opc_mod aso_opc_mod);\n+int mlx5_aso_flow_hit_queue_poll_start(struct mlx5_dev_ctx_shared *sh);\n+int mlx5_aso_flow_hit_queue_poll_stop(struct mlx5_dev_ctx_shared *sh);\n+void mlx5_aso_queue_uninit(struct mlx5_dev_ctx_shared *sh,\n+\t\tenum mlx5_access_aso_opc_mod aso_opc_mod);\n \n #endif /* RTE_PMD_MLX5_H_ */\ndiff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex b0a743477c..ecd3fb250c 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -827,8 +827,8 @@ struct mlx5_flow {\n #define MLX5_FLOW_METER_DISABLE 0\n #define MLX5_FLOW_METER_ENABLE 1\n \n-#define MLX5_ASO_CQE_RESPONSE_DELAY 10\n-#define MLX5_MTR_POLL_CQE_TIMES    100000u\n+#define MLX5_ASO_WQE_CQE_RESPONSE_DELAY 10u\n+#define MLX5_MTR_POLL_WQE_CQE_TIMES 100000u\n \n #define MLX5_MAN_WIDTH 8\n /* Legacy Meter parameter structure. */\ndiff --git a/drivers/net/mlx5/mlx5_flow_age.c b/drivers/net/mlx5/mlx5_flow_aso.c\nsimilarity index 85%\nrename from drivers/net/mlx5/mlx5_flow_age.c\nrename to drivers/net/mlx5/mlx5_flow_aso.c\nindex 00cb20dd62..067471ba0f 100644\n--- a/drivers/net/mlx5/mlx5_flow_age.c\n+++ b/drivers/net/mlx5/mlx5_flow_aso.c\n@@ -144,7 +144,6 @@ mlx5_aso_destroy_sq(struct mlx5_aso_sq *sq)\n {\n \tmlx5_devx_sq_destroy(&sq->sq_obj);\n \tmlx5_aso_cq_destroy(&sq->cq);\n-\tmlx5_aso_devx_dereg_mr(&sq->mr);\n \tmemset(sq, 0, sizeof(*sq));\n }\n \n@@ -155,7 +154,7 @@ mlx5_aso_destroy_sq(struct mlx5_aso_sq *sq)\n  *   ASO SQ to initialize.\n  */\n static void\n-mlx5_aso_init_sq(struct mlx5_aso_sq *sq)\n+mlx5_aso_age_init_sq(struct mlx5_aso_sq *sq)\n {\n \tvolatile struct mlx5_aso_wqe *restrict wqe;\n \tint i;\n@@ -181,6 +180,39 @@ mlx5_aso_init_sq(struct mlx5_aso_sq *sq)\n \t}\n }\n \n+/**\n+ * Initialize Send Queue used for ASO flow meter access.\n+ *\n+ * @param[in] sq\n+ *   ASO SQ to initialize.\n+ */\n+static void\n+mlx5_aso_mtr_init_sq(struct mlx5_aso_sq *sq)\n+{\n+\tvolatile struct mlx5_aso_wqe *restrict wqe;\n+\tint i;\n+\tint size = 1 << sq->log_desc_n;\n+\tuint32_t idx;\n+\n+\t/* All the next fields state should stay constant. */\n+\tfor (i = 0, wqe = &sq->sq_obj.aso_wqes[0]; i < size; ++i, ++wqe) {\n+\t\twqe->general_cseg.sq_ds = rte_cpu_to_be_32((sq->sqn << 8) |\n+\t\t\t\t\t\t\t  (sizeof(*wqe) >> 4));\n+\t\twqe->aso_cseg.operand_masks = RTE_BE32(0u |\n+\t\t\t (ASO_OPER_LOGICAL_OR << ASO_CSEG_COND_OPER_OFFSET) |\n+\t\t\t (ASO_OP_ALWAYS_TRUE << ASO_CSEG_COND_1_OPER_OFFSET) |\n+\t\t\t (ASO_OP_ALWAYS_TRUE << ASO_CSEG_COND_0_OPER_OFFSET) |\n+\t\t\t (BYTEWISE_64BYTE << ASO_CSEG_DATA_MASK_MODE_OFFSET));\n+\t\twqe->general_cseg.flags = RTE_BE32(MLX5_COMP_ALWAYS <<\n+\t\t\t\t\t\t\t MLX5_COMP_MODE_OFFSET);\n+\t\tfor (idx = 0; idx < MLX5_ASO_METERS_PER_WQE;\n+\t\t\tidx++)\n+\t\t\twqe->aso_dseg.mtrs[idx].v_bo_sc_bbog_mm =\n+\t\t\t\tRTE_BE32((1 << ASO_DSEG_VALID_OFFSET) |\n+\t\t\t\t(MLX5_FLOW_COLOR_GREEN << ASO_DSEG_SC_OFFSET));\n+\t}\n+}\n+\n /**\n  * Create Send Queue used for ASO access.\n  *\n@@ -216,13 +248,9 @@ mlx5_aso_sq_create(void *ctx, struct mlx5_aso_sq *sq, int socket,\n \tstruct mlx5_devx_modify_sq_attr modify_attr = {\n \t\t.state = MLX5_SQC_STATE_RDY,\n \t};\n-\tuint32_t sq_desc_n = 1 << log_desc_n;\n \tuint16_t log_wqbb_n;\n \tint ret;\n \n-\tif (mlx5_aso_devx_reg_mr(ctx, (MLX5_ASO_AGE_ACTIONS_PER_POOL / 8) *\n-\t\t\t\t sq_desc_n, &sq->mr, socket, pdn))\n-\t\treturn -1;\n \tif (mlx5_aso_cq_create(ctx, &sq->cq, log_desc_n, socket,\n \t\t\t       mlx5_os_get_devx_uar_page_id(uar)))\n \t\tgoto error;\n@@ -247,7 +275,6 @@ mlx5_aso_sq_create(void *ctx, struct mlx5_aso_sq *sq, int socket,\n \tsq->tail = 0;\n \tsq->sqn = sq->sq_obj.sq->id;\n \tsq->uar_addr = mlx5_os_get_devx_uar_reg_addr(uar);\n-\tmlx5_aso_init_sq(sq);\n \treturn 0;\n error:\n \tmlx5_aso_destroy_sq(sq);\n@@ -264,11 +291,37 @@ mlx5_aso_sq_create(void *ctx, struct mlx5_aso_sq *sq, int socket,\n  *   0 on success, a negative errno value otherwise and rte_errno is set.\n  */\n int\n-mlx5_aso_queue_init(struct mlx5_dev_ctx_shared *sh)\n+mlx5_aso_queue_init(struct mlx5_dev_ctx_shared *sh,\n+\t\t\tenum mlx5_access_aso_opc_mod aso_opc_mod)\n {\n-\treturn mlx5_aso_sq_create(sh->ctx, &sh->aso_age_mng->aso_sq, 0,\n+\tuint32_t sq_desc_n = 1 << MLX5_ASO_QUEUE_LOG_DESC;\n+\n+\tswitch (aso_opc_mod) {\n+\tcase ASO_OPC_MOD_FLOW_HIT:\n+\t\tif (mlx5_aso_devx_reg_mr(sh->ctx,\n+\t\t\t(MLX5_ASO_AGE_ACTIONS_PER_POOL / 8) *\n+\t\t\tsq_desc_n, &sh->aso_age_mng->aso_sq.mr, 0, sh->pdn))\n+\t\t\treturn -1;\n+\t\tif (mlx5_aso_sq_create(sh->ctx, &sh->aso_age_mng->aso_sq, 0,\n+\t\t\t\t  sh->tx_uar, sh->pdn, MLX5_ASO_QUEUE_LOG_DESC,\n+\t\t\t\t  sh->sq_ts_format)) {\n+\t\t\tmlx5_aso_devx_dereg_mr(&sh->aso_age_mng->aso_sq.mr);\n+\t\t\treturn -1;\n+\t\t}\n+\t\tmlx5_aso_age_init_sq(&sh->aso_age_mng->aso_sq);\n+\t\tbreak;\n+\tcase ASO_OPC_MOD_POLICER:\n+\t\tif (mlx5_aso_sq_create(sh->ctx, &sh->mtrmng->sq, 0,\n \t\t\t\t  sh->tx_uar, sh->pdn, MLX5_ASO_QUEUE_LOG_DESC,\n-\t\t\t\t  sh->sq_ts_format);\n+\t\t\t\t  sh->sq_ts_format))\n+\t\t\treturn -1;\n+\t\tmlx5_aso_mtr_init_sq(&sh->mtrmng->sq);\n+\t\tbreak;\n+\tdefault:\n+\t\tDRV_LOG(ERR, \"Unknown ASO operation mode\");\n+\t\treturn -1;\n+\t}\n+\treturn 0;\n }\n \n /**\n@@ -278,9 +331,24 @@ mlx5_aso_queue_init(struct mlx5_dev_ctx_shared *sh)\n  *   Pointer to shared device context.\n  */\n void\n-mlx5_aso_queue_uninit(struct mlx5_dev_ctx_shared *sh)\n+mlx5_aso_queue_uninit(struct mlx5_dev_ctx_shared *sh,\n+\t\t\t\tenum mlx5_access_aso_opc_mod aso_opc_mod)\n {\n-\tmlx5_aso_destroy_sq(&sh->aso_age_mng->aso_sq);\n+\tstruct mlx5_aso_sq *sq;\n+\n+\tswitch (aso_opc_mod) {\n+\tcase ASO_OPC_MOD_FLOW_HIT:\n+\t\tmlx5_aso_devx_dereg_mr(&sh->aso_age_mng->aso_sq.mr);\n+\t\tsq = &sh->aso_age_mng->aso_sq;\n+\t\tbreak;\n+\tcase ASO_OPC_MOD_POLICER:\n+\t\tsq = &sh->mtrmng->sq;\n+\t\tbreak;\n+\tdefault:\n+\t\tDRV_LOG(ERR, \"Unknown ASO operation mode\");\n+\t\treturn;\n+\t}\n+\tmlx5_aso_destroy_sq(sq);\n }\n \n /**\n@@ -555,7 +623,7 @@ mlx5_flow_aso_alarm(void *arg)\n  *   0 on success, a negative errno value otherwise and rte_errno is set.\n  */\n int\n-mlx5_aso_queue_start(struct mlx5_dev_ctx_shared *sh)\n+mlx5_aso_flow_hit_queue_poll_start(struct mlx5_dev_ctx_shared *sh)\n {\n \tif (rte_eal_alarm_set(US_PER_S, mlx5_flow_aso_alarm, sh)) {\n \t\tDRV_LOG(ERR, \"Cannot reinitialize ASO age alarm.\");\n@@ -574,7 +642,7 @@ mlx5_aso_queue_start(struct mlx5_dev_ctx_shared *sh)\n  *   0 on success, a negative errno value otherwise and rte_errno is set.\n  */\n int\n-mlx5_aso_queue_stop(struct mlx5_dev_ctx_shared *sh)\n+mlx5_aso_flow_hit_queue_poll_stop(struct mlx5_dev_ctx_shared *sh)\n {\n \tint retries = 1024;\n \ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex cf55ed6353..fbec818c64 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -5962,6 +5962,11 @@ flow_dv_mtr_container_resize(struct rte_eth_dev *dev)\n \t\trte_errno = ENOMEM;\n \t\treturn -ENOMEM;\n \t}\n+\tif (!mtrmng->n)\n+\t\tif (mlx5_aso_queue_init(priv->sh, ASO_OPC_MOD_POLICER)) {\n+\t\t\tmlx5_free(pools);\n+\t\t\treturn -ENOMEM;\n+\t\t}\n \tif (old_pools)\n \t\tmemcpy(pools, old_pools, mtrmng->n *\n \t\t\t\t       sizeof(struct mlx5_aso_mtr_pool *));\n@@ -10819,7 +10824,7 @@ flow_dv_aso_age_pools_resize(struct rte_eth_dev *dev)\n \t\tmlx5_free(old_pools);\n \t} else {\n \t\t/* First ASO flow hit allocation - starting ASO data-path. */\n-\t\tint ret = mlx5_aso_queue_start(priv->sh);\n+\t\tint ret = mlx5_aso_flow_hit_queue_poll_start(priv->sh);\n \n \t\tif (ret) {\n \t\t\tmlx5_free(pools);\ndiff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c\nindex 956a6c33e7..ef4ca30e4a 100644\n--- a/drivers/net/mlx5/mlx5_flow_meter.c\n+++ b/drivers/net/mlx5/mlx5_flow_meter.c\n@@ -811,7 +811,6 @@ mlx5_flow_meter_destroy(struct rte_eth_dev *dev, uint32_t meter_id,\n \t\t\tstruct rte_mtr_error *error)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tstruct mlx5_aso_mtr_pools_mng *mtrmng = priv->sh->mtrmng;\n \tstruct mlx5_flow_meter_info *fm;\n \tconst struct rte_flow_attr attr = {\n \t\t\t\t.ingress = 1,\n@@ -836,7 +835,7 @@ mlx5_flow_meter_destroy(struct rte_eth_dev *dev, uint32_t meter_id,\n \t\t\t\t\t  RTE_MTR_ERROR_TYPE_UNSPECIFIED,\n \t\t\t\t\t  NULL, \"Meter object is being used.\");\n \tif (priv->sh->meter_aso_en) {\n-\t\tif (mlx5_l3t_clear_entry(mtrmng->mtr_idx_tbl, meter_id))\n+\t\tif (mlx5_l3t_clear_entry(priv->mtr_idx_tbl, meter_id))\n \t\t\treturn -rte_mtr_error_set(error, EBUSY,\n \t\t\t\tRTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,\n \t\t\t\t\"Fail to delete ASO Meter in index table.\");\n@@ -1302,7 +1301,7 @@ mlx5_flow_meter_find(struct mlx5_priv *priv, uint32_t meter_id,\n \t\t\trte_spinlock_unlock(&mtrmng->mtrsl);\n \t\t\treturn NULL;\n \t\t}\n-\t\tif (mlx5_l3t_get_entry(mtrmng->mtr_idx_tbl, meter_id, &data) ||\n+\t\tif (mlx5_l3t_get_entry(priv->mtr_idx_tbl, meter_id, &data) ||\n \t\t\t!data.dword) {\n \t\t\trte_spinlock_unlock(&mtrmng->mtrsl);\n \t\t\treturn NULL;\n@@ -1310,7 +1309,7 @@ mlx5_flow_meter_find(struct mlx5_priv *priv, uint32_t meter_id,\n \t\tif (mtr_idx)\n \t\t\t*mtr_idx = data.dword;\n \t\taso_mtr = mlx5_aso_meter_by_idx(priv, data.dword);\n-\t\tmlx5_l3t_clear_entry(mtrmng->mtr_idx_tbl, meter_id);\n+\t\tmlx5_l3t_clear_entry(priv->mtr_idx_tbl, meter_id);\n \t\tif (meter_id == aso_mtr->fm.meter_id) {\n \t\t\trte_spinlock_unlock(&mtrmng->mtrsl);\n \t\t\treturn &aso_mtr->fm;\n",
    "prefixes": [
        "v5",
        "10/14"
    ]
}