get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 91912,
    "url": "http://patches.dpdk.org/api/patches/91912/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210421041958.2306539-3-lizh@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20210421041958.2306539-3-lizh@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210421041958.2306539-3-lizh@nvidia.com",
    "date": "2021-04-21T04:19:57",
    "name": "[v4,2/2] net/mlx5: support meter PPS profile",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c5bf77cf1b963dbbc83ee54d6e247eda9789576a",
    "submitter": {
        "id": 1967,
        "url": "http://patches.dpdk.org/api/people/1967/?format=api",
        "name": "Li Zhang",
        "email": "lizh@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210421041958.2306539-3-lizh@nvidia.com/mbox/",
    "series": [
        {
            "id": 16541,
            "url": "http://patches.dpdk.org/api/series/16541/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=16541",
            "date": "2021-04-21T04:19:57",
            "name": "Support meter PPS(packet per second) in MLX5 PMD",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/16541/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/91912/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/91912/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 07FF4A0548;\n\tWed, 21 Apr 2021 06:20:08 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D39D9418DB;\n\tWed, 21 Apr 2021 06:20:08 +0200 (CEST)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by mails.dpdk.org (Postfix) with ESMTP id B32BD4191B\n for <dev@dpdk.org>; Wed, 21 Apr 2021 06:20:06 +0200 (CEST)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n lizh@nvidia.com)\n with SMTP; 21 Apr 2021 07:20:01 +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 13L4K08C020974;\n Wed, 21 Apr 2021 07:20:01 +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": "Wed, 21 Apr 2021 07:19:57 +0300",
        "Message-Id": "<20210421041958.2306539-3-lizh@nvidia.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20210421041958.2306539-1-lizh@nvidia.com>",
        "References": "<20210331092319.1446618-1-lizh@nvidia.com>\n <20210421041958.2306539-1-lizh@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v4 2/2] net/mlx5: support meter PPS profile",
        "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": "Currently meter algorithms only supports bytes per second(BPS).\nSuch as Single Rate Three Color Marker (srTCM rfc2697)\nAdd packet_mode flag to support rate is packet per second.\nSo that it can meter traffic by packet per second (PPS).\n\nSigned-off-by: Li Zhang <lizh@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n doc/guides/nics/mlx5.rst           |  1 +\n drivers/net/mlx5/mlx5_flow_aso.c   | 17 ++++---\n drivers/net/mlx5/mlx5_flow_meter.c | 74 +++++++++++++++++++++++-------\n 3 files changed, 69 insertions(+), 23 deletions(-)",
    "diff": "diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst\nindex b27a9a69f6..2bb4f18a08 100644\n--- a/doc/guides/nics/mlx5.rst\n+++ b/doc/guides/nics/mlx5.rst\n@@ -416,6 +416,7 @@ Limitations\n      - green: QUEUE, RSS, PORT_ID, JUMP, MARK and SET_TAG.\n      - yellow: must be empty.\n      - RED: must be DROP.\n+  - meter profile packet mode is supported.\n \n Statistics\n ----------\ndiff --git a/drivers/net/mlx5/mlx5_flow_aso.c b/drivers/net/mlx5/mlx5_flow_aso.c\nindex 20cd4fe18c..da513a600c 100644\n--- a/drivers/net/mlx5/mlx5_flow_aso.c\n+++ b/drivers/net/mlx5/mlx5_flow_aso.c\n@@ -191,7 +191,6 @@ mlx5_aso_mtr_init_sq(struct mlx5_aso_sq *sq)\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@@ -204,11 +203,6 @@ mlx5_aso_mtr_init_sq(struct mlx5_aso_sq *sq)\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@@ -664,6 +658,7 @@ mlx5_aso_mtr_sq_enqueue_single(struct mlx5_aso_sq *sq,\n {\n \tvolatile struct mlx5_aso_wqe *wqe = NULL;\n \tstruct mlx5_flow_meter_info *fm = NULL;\n+\tstruct mlx5_flow_meter_profile *fmp;\n \tuint16_t size = 1 << sq->log_desc_n;\n \tuint16_t mask = size - 1;\n \tuint16_t res;\n@@ -704,6 +699,16 @@ mlx5_aso_mtr_sq_enqueue_single(struct mlx5_aso_sq *sq,\n \t\t\tRTE_BE32(MLX5_IFC_FLOW_METER_DISABLE_CBS_CIR_VAL);\n \t\twqe->aso_dseg.mtrs[dseg_idx].ebs_eir = 0;\n \t}\n+\tfmp = fm->profile;\n+\tif (fmp->profile.packet_mode)\n+\t\twqe->aso_dseg.mtrs[dseg_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\t\t\t(MLX5_METER_MODE_PKT << ASO_DSEG_MTR_MODE));\n+\telse\n+\t\twqe->aso_dseg.mtrs[dseg_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 \tsq->head++;\n \tsq->pi += 2;/* Each WQE contains 2 WQEBB's. */\n \trte_io_wmb();\ndiff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c\nindex e97a1d77a6..ac2735e6e2 100644\n--- a/drivers/net/mlx5/mlx5_flow_meter.c\n+++ b/drivers/net/mlx5/mlx5_flow_meter.c\n@@ -144,13 +144,19 @@ mlx5_flow_meter_profile_validate(struct rte_eth_dev *dev,\n \tif (profile->alg == RTE_MTR_SRTCM_RFC2697) {\n \t\tif (priv->config.hca_attr.qos.flow_meter_old) {\n \t\t\t/* Verify support for flow meter parameters. */\n-\t\t\tif (profile->srtcm_rfc2697.cir > 0 &&\n-\t\t\t    profile->srtcm_rfc2697.cir <= MLX5_SRTCM_CIR_MAX &&\n-\t\t\t    profile->srtcm_rfc2697.cbs > 0 &&\n-\t\t\t    profile->srtcm_rfc2697.cbs <= MLX5_SRTCM_CBS_MAX &&\n-\t\t\t    profile->srtcm_rfc2697.ebs <= MLX5_SRTCM_EBS_MAX)\n-\t\t\t\treturn 0;\n-\t\t\telse\n+\t\t\tif (priv->sh->meter_aso_en && profile->packet_mode) {\n+\t\t\t\tif (profile->srtcm_rfc2697.cir > 0 &&\n+\t\t\t\t\t(profile->srtcm_rfc2697.cir <<\n+\t\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT)\n+\t\t\t\t\t<= MLX5_SRTCM_CIR_MAX &&\n+\t\t\t\t\tprofile->srtcm_rfc2697.cbs > 0 &&\n+\t\t\t\t\t(profile->srtcm_rfc2697.cbs <<\n+\t\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT)\n+\t\t\t\t\t<= MLX5_SRTCM_CBS_MAX &&\n+\t\t\t\t\t(profile->srtcm_rfc2697.ebs <<\n+\t\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT)\n+\t\t\t\t\t<= MLX5_SRTCM_EBS_MAX)\n+\t\t\t\t\treturn 0;\n \t\t\t\treturn -rte_mtr_error_set\n \t\t\t\t\t     (error, ENOTSUP,\n \t\t\t\t\t      RTE_MTR_ERROR_TYPE_MTR_PARAMS,\n@@ -158,6 +164,22 @@ mlx5_flow_meter_profile_validate(struct rte_eth_dev *dev,\n \t\t\t\t\t      profile->srtcm_rfc2697.ebs ?\n \t\t\t\t\t      \"Metering value ebs must be 0.\" :\n \t\t\t\t\t      \"Invalid metering parameters.\");\n+\t\t\t}\n+\t\t\tif (profile->srtcm_rfc2697.cir > 0 &&\n+\t\t\t\tprofile->srtcm_rfc2697.cir <=\n+\t\t\t\t\t\tMLX5_SRTCM_CIR_MAX &&\n+\t\t\t\tprofile->srtcm_rfc2697.cbs > 0 &&\n+\t\t\t\tprofile->srtcm_rfc2697.cbs <=\n+\t\t\t\t\t\tMLX5_SRTCM_CBS_MAX &&\n+\t\t\t\tprofile->srtcm_rfc2697.ebs <=\n+\t\t\t\t\t\tMLX5_SRTCM_EBS_MAX)\n+\t\t\t\treturn 0;\n+\t\t\treturn -rte_mtr_error_set(error, ENOTSUP,\n+\t\t\t\t\tRTE_MTR_ERROR_TYPE_MTR_PARAMS,\n+\t\t\t\t\tNULL,\n+\t\t\t\t\tprofile->srtcm_rfc2697.ebs ?\n+\t\t\t\t\t\"Metering value ebs must be 0.\" :\n+\t\t\t\t\t\"Invalid metering parameters.\");\n \t\t}\n \t}\n \treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -241,20 +263,36 @@ mlx5_flow_meter_xbs_man_exp_calc(uint64_t xbs, uint8_t *man, uint8_t *exp)\n  */\n static int\n mlx5_flow_meter_param_fill(struct mlx5_flow_meter_profile *fmp,\n-\t\t\t  struct rte_mtr_error *error)\n+\t\t\tstruct mlx5_priv *priv, struct rte_mtr_error *error)\n {\n \tstruct mlx5_flow_meter_srtcm_rfc2697_prm *srtcm = &fmp->srtcm_prm;\n \tuint8_t man, exp;\n \tuint32_t cbs_exp, cbs_man, cir_exp, cir_man;\n \tuint32_t ebs_exp, ebs_man;\n+\tuint64_t cir, cbs, ebs;\n \n \tif (fmp->profile.alg != RTE_MTR_SRTCM_RFC2697)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n \t\t\t\tRTE_MTR_ERROR_TYPE_METER_PROFILE,\n \t\t\t\tNULL, \"Metering algorithm not supported.\");\n+\tif (!priv->sh->meter_aso_en && fmp->profile.packet_mode)\n+\t\treturn -rte_mtr_error_set(error, ENOTSUP,\n+\t\t\tRTE_MTR_ERROR_TYPE_METER_PROFILE,\n+\t\t\tNULL, \"Metering algorithm packet mode not supported.\");\n+\tif (priv->sh->meter_aso_en && fmp->profile.packet_mode) {\n+\t\tcir = fmp->profile.srtcm_rfc2697.cir <<\n+\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT;\n+\t\tcbs = fmp->profile.srtcm_rfc2697.cbs <<\n+\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT;\n+\t\tebs = fmp->profile.srtcm_rfc2697.ebs <<\n+\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT;\n+\t} else {\n+\t\tcir = fmp->profile.srtcm_rfc2697.cir;\n+\t\tcbs = fmp->profile.srtcm_rfc2697.cbs;\n+\t\tebs = fmp->profile.srtcm_rfc2697.ebs;\n+\t}\n \t/* cir = 8G * cir_mantissa * 1/(2^cir_exponent)) Bytes/Sec */\n-\tmlx5_flow_meter_cir_man_exp_calc(fmp->profile.srtcm_rfc2697.cir,\n-\t\t\t\t    &man, &exp);\n+\tmlx5_flow_meter_cir_man_exp_calc(cir, &man, &exp);\n \t/* Check if cir mantissa is too large. */\n \tif (exp > ASO_DSEG_CIR_EXP_MASK)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -264,8 +302,7 @@ mlx5_flow_meter_param_fill(struct mlx5_flow_meter_profile *fmp,\n \tcir_man = man;\n \tcir_exp = exp;\n \t /* cbs = cbs_mantissa * 2^cbs_exponent */\n-\tmlx5_flow_meter_xbs_man_exp_calc(fmp->profile.srtcm_rfc2697.cbs,\n-\t\t\t\t    &man, &exp);\n+\tmlx5_flow_meter_xbs_man_exp_calc(cbs, &man, &exp);\n \t/* Check if cbs mantissa is too large. */\n \tif (exp > ASO_DSEG_EXP_MASK)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -278,8 +315,7 @@ mlx5_flow_meter_param_fill(struct mlx5_flow_meter_profile *fmp,\n \t\t\t\tcbs_man << ASO_DSEG_CBS_MAN_OFFSET |\n \t\t\t\tcir_exp << ASO_DSEG_CIR_EXP_OFFSET |\n \t\t\t\tcir_man);\n-\tmlx5_flow_meter_xbs_man_exp_calc(fmp->profile.srtcm_rfc2697.ebs,\n-\t\t\t\t    &man, &exp);\n+\tmlx5_flow_meter_xbs_man_exp_calc(ebs, &man, &exp);\n \t/* Check if ebs mantissa is too large. */\n \tif (exp > ASO_DSEG_EXP_MASK)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -319,11 +355,15 @@ mlx5_flow_mtr_cap_get(struct rte_eth_dev *dev,\n \t\t\t\t\t  RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,\n \t\t\t\t\t  \"Meter is not supported\");\n \tmemset(cap, 0, sizeof(*cap));\n-\tif (priv->sh->meter_aso_en)\n+\tif (priv->sh->meter_aso_en) {\n \t\t/* 2 meters per one ASO cache line. */\n \t\tcap->n_max = 1 << (qattr->log_max_num_meter_aso + 1);\n-\telse\n+\t\tcap->srtcm_rfc2697_packet_mode_supported = 1;\n+\t} else {\n \t\tcap->n_max = 1 << qattr->log_max_flow_meter;\n+\t\tcap->srtcm_rfc2697_packet_mode_supported = 0;\n+\t}\n+\tcap->srtcm_rfc2697_byte_mode_supported = 1;\n \tcap->n_shared_max = cap->n_max;\n \tcap->identical = 1;\n \tcap->shared_identical = 1;\n@@ -384,7 +424,7 @@ mlx5_flow_meter_profile_add(struct rte_eth_dev *dev,\n \tfmp->id = meter_profile_id;\n \tfmp->profile = *profile;\n \t/* Fill the flow meter parameters for the PRM. */\n-\tret = mlx5_flow_meter_param_fill(fmp, error);\n+\tret = mlx5_flow_meter_param_fill(fmp, priv, error);\n \tif (ret)\n \t\tgoto error;\n \t/* Add to list. */\n",
    "prefixes": [
        "v4",
        "2/2"
    ]
}