get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 96019,
    "url": "https://patches.dpdk.org/api/patches/96019/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210718171817.23822-4-bingz@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": "<20210718171817.23822-4-bingz@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210718171817.23822-4-bingz@nvidia.com",
    "date": "2021-07-18T17:18:13",
    "name": "[v2,3/7] net/mlx5: added support for yellow policy rules",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a985748ebe2aa0f9ff442c2321c0f6075eedffe1",
    "submitter": {
        "id": 1976,
        "url": "https://patches.dpdk.org/api/people/1976/?format=api",
        "name": "Bing Zhao",
        "email": "bingz@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/20210718171817.23822-4-bingz@nvidia.com/mbox/",
    "series": [
        {
            "id": 17883,
            "url": "https://patches.dpdk.org/api/series/17883/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17883",
            "date": "2021-07-18T17:18:10",
            "name": "support yellow color policy in mlx5",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/17883/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/96019/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/96019/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 E1FB4A0C46;\n\tSun, 18 Jul 2021 19:19:14 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 806C841187;\n\tSun, 18 Jul 2021 19:19:07 +0200 (CEST)",
            "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2071.outbound.protection.outlook.com [40.107.94.71])\n by mails.dpdk.org (Postfix) with ESMTP id 3607941188\n for <dev@dpdk.org>; Sun, 18 Jul 2021 19:19:03 +0200 (CEST)",
            "from BN0PR04CA0092.namprd04.prod.outlook.com (2603:10b6:408:ec::7)\n by PH0PR12MB5403.namprd12.prod.outlook.com (2603:10b6:510:eb::19) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Sun, 18 Jul\n 2021 17:19:01 +0000",
            "from BN8NAM11FT068.eop-nam11.prod.protection.outlook.com\n (2603:10b6:408:ec:cafe::b) by BN0PR04CA0092.outlook.office365.com\n (2603:10b6:408:ec::7) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend\n Transport; Sun, 18 Jul 2021 17:19:01 +0000",
            "from mail.nvidia.com (216.228.112.34) by\n BN8NAM11FT068.mail.protection.outlook.com (10.13.177.69) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4331.21 via Frontend Transport; Sun, 18 Jul 2021 17:19:01 +0000",
            "from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 18 Jul\n 2021 17:18:57 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Ru/TxB0rLu/ldyBzAOgcsr4Z0ZA9P7rPqbWYERxGTdWKWeD2v6NvWvMhCO0rVhABSxKjxxU0KxtZBnBF8AYUYjQUqrLoLeKoQyHdLqZRy9zwUkipAXo54M4wM4wQbTU1qXgFFyVi4mGL7IEZC92nXd66sa3EVKjf+z2pjTZ5om62fvsNlMHjc6dLsZ0IXPgeP1NNciA+A3p78z59dDAWdO38IUfcffrpMLfGKPGaacIJ2+XqXxlZMqu+hzNzl3OgTsqFdHTVYCoene8HNS+tB68BVvoz1r5U8oT/tQNIsy/HYWYUid9yUJyFY0pZTfXPN6ShGg8yljsbBe5JTftvnA==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=BUzZey/mMCcWcsVk/JkN0m+PrRgJqtd0BqIHDxw5ci0=;\n b=kYmZ6EzShHFaNnZD2DkEIP9GMMdlE0m3y3hbOU9ssUX7Eo2gvwo65a6VgB3aJGXwGpikqcscEHo/Yx7Y/w7K3N0fgG9sUMOP08YNhZbQJvT6m0usWW1l+wUMW/aCc8JMlDg4QLoO0u/o6ZR2TDb4AHRSpa/XnJjl82aEa6DD1/E62t0xI7dCnXY5PLsmVwJ30t4p9IaMqKaPPxP1+hAnrfkBU8ENBFQj1CRCMVV+9a1gerN048LZ55SzKNmAt6+GXaGe2zC1OOz+KP2l2/Gq7UOzNMC8km6/0qQqJldGCU3on6YJl2TSiEza2BEg7uSlnlRDm/1m0ymdBolWp7J7sg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com;\n dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=BUzZey/mMCcWcsVk/JkN0m+PrRgJqtd0BqIHDxw5ci0=;\n b=MDuShUGNIBiFOmmFuKzIyQAkSMZcdqixsns//z2J3UQ86G9PMnmo+2HSmQZ0FqSmB88P+dQKoiyP6P2jF70ZaC83NSw7TmCDAR9u0OLRoHv07KjlZbTW/8whQOrTkTZp2DNDt2mCiRNmxSl+tTMMMJe8BGDpDsboUJBPwxRwjcZCPHGDbM48aU9PKsJ6ecvCSFnN/DFgYBGMqGnvpyjOy2BxaXw0jntxiY67+joAiVXEGHsg5KmEQHPcAfq5S8zl9inb9Gfi2/2g24nUvyTjMgJCBPhclZck1v23NNIgXbfOfeKkXRW2n7ckGksPQGbJzL3ZqRaNNt6+UmFBaSBLLQ==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; monjalon.net; dkim=none (message not signed)\n header.d=none;monjalon.net; dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.34 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.34; helo=mail.nvidia.com;",
        "From": "Bing Zhao <bingz@nvidia.com>",
        "To": "<viacheslavo@nvidia.com>, <matan@nvidia.com>",
        "CC": "<dev@dpdk.org>, <orika@nvidia.com>, <rasland@nvidia.com>,\n <thomas@monjalon.net>, <lizh@nvidia.com>, <shunh@nvidia.com>",
        "Date": "Sun, 18 Jul 2021 20:18:13 +0300",
        "Message-ID": "<20210718171817.23822-4-bingz@nvidia.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20210718171817.23822-1-bingz@nvidia.com>",
        "References": "<20210705155756.21443-1-bingz@nvidia.com>\n <20210718171817.23822-1-bingz@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[172.20.187.5]",
        "X-ClientProxiedBy": "HQMAIL107.nvidia.com (172.20.187.13) To\n HQMAIL107.nvidia.com (172.20.187.13)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "952168f8-d781-4618-70d4-08d94a1022f1",
        "X-MS-TrafficTypeDiagnostic": "PH0PR12MB5403:",
        "X-LD-Processed": "43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr",
        "X-Microsoft-Antispam-PRVS": "\n <PH0PR12MB5403CA11756971FE8A1E824BD0E09@PH0PR12MB5403.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:7691;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n xpYnc18phts3K/Cikjt8oPEM9K2vjYQa3MAwSmLYb6AxpLUv5/4NnYtW5Wv7Kzej3ipArsKwztiUM01Wney86ttd19XvV3ysYJqdq5iFVki8771SuF8hK8Z7ZWMDgJu1EuoSAA62o8YD6mvB4CEWnIqEw01R00pPvLL8+hl2OHOi/SD/kuzPkhpz6NKQCmqtCdGWZ/13og66Q5RTS89KokjfZj4zw4DYPHiHGD75khjgK21enRHodveTBC3amOm8egxqOL8k3XvbJva0SzRL3w+iEALZ81iL/WtBUuDprRxDpqZsUUtk3ylLQEBuAy9eUIaaDoQcPB1DltoUEo0TEXyVBz2ONiYo0N2HKpMidggC1+0/GZEems8TFAe6B4vVG43fe47J5Oq30ypS2GOhdYpeHy/m7JYvGo+yyaZp5mf1pIOYuYMxUBXlzYvtugDYscVZlAGDauQXCGfx78oNY77dFdYG8QrEP/mVN30Ays54oaPb+pICAd0B/VqpAAwOLV5TZdzAuWToVqQ+sUVZSQxs02jF5HtXOznHsJlOcaxI7scLRaaGyjCzE5/6ibyRfkDAes5gV5EJXH/4nzhwlxvrb09CTrH81rug2b1bToEi9tpTNGVjsgozbrGlRbwdlYPdEmJOvKUGqPotsubXgxBqmtt/1EW9syK0QYdd5aDr0OiS84O+d4PFrC8m3CVzbFHn6mi/klvLk6rh10GFS04Ql/ZsE7m3RdpwCYNMj8Q=",
        "X-Forefront-Antispam-Report": "CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;\n SFS:(4636009)(36840700001)(46966006)(26005)(70586007)(16526019)(186003)(2906002)(82310400003)(86362001)(54906003)(30864003)(34020700004)(6636002)(70206006)(316002)(6666004)(36906005)(8936002)(5660300002)(36860700001)(107886003)(110136005)(6286002)(4326008)(1076003)(83380400001)(336012)(426003)(7696005)(8676002)(7636003)(47076005)(356005)(508600001)(55016002)(36756003)(2616005);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "18 Jul 2021 17:19:01.3377 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 952168f8-d781-4618-70d4-08d94a1022f1",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BN8NAM11FT068.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH0PR12MB5403",
        "Subject": "[dpdk-dev] [PATCH v2 3/7] net/mlx5: added support for yellow policy\n rules",
        "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": "When creating a meter policy, both / either of the action rules for\ngreen and yellow colors may be provided. After validation, usually\nthe actions are created before the meter is using by a flow rule.\n\nIf there is action specified for the yellow color, the action rules\nshould be created together with green color in the same time. The\naction of green / yellow color can be empty, then the default\nbehavior is the jump action of the rule, just the same as that of\nthe default policy.\n\nIf the fate action of either one color is queue / RSS, all the\nactions rules will be created on the flow splitting stage instead of\nthe policy adding stage.\n\nSigned-off-by: Bing Zhao <bingz@nvidia.com>\n---\n drivers/net/mlx5/mlx5.h            |  4 +++\n drivers/net/mlx5/mlx5_flow_dv.c    | 50 +++++++++++++++------------\n drivers/net/mlx5/mlx5_flow_meter.c | 54 ++++++++++++++++++++----------\n 3 files changed, 68 insertions(+), 40 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex 791696caf4..c3e1298ebd 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -744,6 +744,10 @@ struct mlx5_flow_meter_policy {\n \t/* Is queue action in policy table. */\n \tuint32_t is_hierarchy:1;\n \t/* Is meter action in policy table. */\n+\tuint32_t skip_y:1;\n+\t/* If yellow color policy is skipped. */\n+\tuint32_t skip_g:1;\n+\t/* If green color policy is skipped. */\n \trte_spinlock_t sl;\n \tuint32_t ref_cnt;\n \t/* Use count. */\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex cfc646c5e5..ffe97d453a 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -15214,7 +15214,7 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct rte_flow_error flow_err;\n \tconst struct rte_flow_action *act;\n-\tuint64_t action_flags = 0;\n+\tuint64_t action_flags;\n \tstruct mlx5_flow_handle dh;\n \tstruct mlx5_flow dev_flow;\n \tstruct mlx5_flow_dv_port_id_action_resource port_id_action;\n@@ -15234,21 +15234,24 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,\n \tmemset(&dh, 0, sizeof(struct mlx5_flow_handle));\n \tmemset(&dev_flow, 0, sizeof(struct mlx5_flow));\n \tmemset(&port_id_action, 0,\n-\t\tsizeof(struct mlx5_flow_dv_port_id_action_resource));\n+\t       sizeof(struct mlx5_flow_dv_port_id_action_resource));\n \tmemset(mhdr_res, 0, sizeof(*mhdr_res));\n \tmhdr_res->ft_type = transfer ? MLX5DV_FLOW_TABLE_TYPE_FDB :\n-\t\t\t\t\tegress ?\n-\t\t\t\t\tMLX5DV_FLOW_TABLE_TYPE_NIC_TX :\n-\t\t\t\t\tMLX5DV_FLOW_TABLE_TYPE_NIC_RX;\n+\t\t\t\t       (egress ? MLX5DV_FLOW_TABLE_TYPE_NIC_TX :\n+\t\t\t\t\tMLX5DV_FLOW_TABLE_TYPE_NIC_RX);\n \tdev_flow.handle = &dh;\n \tdev_flow.dv.port_id_action = &port_id_action;\n \tdev_flow.external = true;\n \tfor (i = 0; i < RTE_COLORS; i++) {\n \t\tif (i < MLX5_MTR_RTE_COLORS)\n \t\t\tact_cnt = &mtr_policy->act_cnt[i];\n+\t\t/* Skip the color policy actions creation. */\n+\t\tif ((i == RTE_COLOR_YELLOW && mtr_policy->skip_y) ||\n+\t\t    (i == RTE_COLOR_GREEN && mtr_policy->skip_g))\n+\t\t\tcontinue;\n+\t\taction_flags = 0;\n \t\tfor (act = actions[i];\n-\t\t\tact && act->type != RTE_FLOW_ACTION_TYPE_END;\n-\t\t\tact++) {\n+\t\t     act && act->type != RTE_FLOW_ACTION_TYPE_END; act++) {\n \t\t\tswitch (act->type) {\n \t\t\tcase RTE_FLOW_ACTION_TYPE_MARK:\n \t\t\t{\n@@ -15456,7 +15459,7 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,\n \t\t\t\t\t(1 << MLX5_SCALE_FLOW_GROUP_BIT),\n \t\t\t\t};\n \t\t\t\tstruct mlx5_flow_meter_sub_policy *sub_policy =\n-\t\t\t\tmtr_policy->sub_policys[domain][0];\n+\t\t\t\t\tmtr_policy->sub_policys[domain][0];\n \n \t\t\t\tif (i >= MLX5_MTR_RTE_COLORS)\n \t\t\t\t\treturn -rte_mtr_error_set(error,\n@@ -15500,6 +15503,10 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,\n \t\t\t\taction_flags |= MLX5_FLOW_ACTION_JUMP;\n \t\t\t\tbreak;\n \t\t\t}\n+\t\t\t/*\n+\t\t\t * No need to check meter hierarchy for Y or R colors\n+\t\t\t * here since it is done in the validation stage.\n+\t\t\t */\n \t\t\tcase RTE_FLOW_ACTION_TYPE_METER:\n \t\t\t{\n \t\t\t\tconst struct rte_flow_action_meter *mtr;\n@@ -15615,6 +15622,7 @@ flow_dv_create_mtr_policy_acts(struct rte_eth_dev *dev,\n \t\t\tret = __flow_dv_create_domain_policy_acts(dev,\n \t\t\t\tmtr_policy, actions,\n \t\t\t\t(enum mlx5_meter_domain)i, error);\n+\t\t\t/* Cleaning resource is done in the caller level. */\n \t\t\tif (ret)\n \t\t\t\treturn ret;\n \t\t}\n@@ -16156,16 +16164,15 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev,\n \n \tfor (i = 0; i < RTE_COLORS; i++) {\n \t\tacts[i].actions_n = 0;\n-\t\tif (i == RTE_COLOR_YELLOW)\n-\t\t\tcontinue;\n \t\tif (i == RTE_COLOR_RED) {\n \t\t\t/* Only support drop on red. */\n \t\t\tacts[i].dv_actions[0] =\n-\t\t\tmtr_policy->dr_drop_action[domain];\n+\t\t\t\tmtr_policy->dr_drop_action[domain];\n \t\t\tacts[i].actions_n = 1;\n \t\t\tcontinue;\n \t\t}\n-\t\tif (mtr_policy->act_cnt[i].fate_action == MLX5_FLOW_FATE_MTR) {\n+\t\tif (i == RTE_COLOR_GREEN &&\n+\t\t    mtr_policy->act_cnt[i].fate_action == MLX5_FLOW_FATE_MTR) {\n \t\t\tstruct rte_flow_attr attr = {\n \t\t\t\t.transfer = transfer\n \t\t\t};\n@@ -16199,13 +16206,12 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev,\n \t\t\t\t\"mark action for policy.\");\n \t\t\t\tgoto err_exit;\n \t\t\t}\n-\t\t\tacts[i].dv_actions[acts[i].actions_n] =\n-\t\t\t\t\t\ttag->action;\n+\t\t\tacts[i].dv_actions[acts[i].actions_n] = tag->action;\n \t\t\tacts[i].actions_n++;\n \t\t}\n \t\tif (mtr_policy->act_cnt[i].modify_hdr) {\n \t\t\tacts[i].dv_actions[acts[i].actions_n] =\n-\t\t\tmtr_policy->act_cnt[i].modify_hdr->action;\n+\t\t\t\tmtr_policy->act_cnt[i].modify_hdr->action;\n \t\t\tacts[i].actions_n++;\n \t\t}\n \t\tif (mtr_policy->act_cnt[i].fate_action) {\n@@ -16220,7 +16226,7 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev,\n \t\t\t\t\tgoto err_exit;\n \t\t\t\t}\n \t\t\t\tacts[i].dv_actions[acts[i].actions_n] =\n-\t\t\t\tport_action->action;\n+\t\t\t\t\tport_action->action;\n \t\t\t\tacts[i].actions_n++;\n \t\t\t\tmtr_policy->dev = dev;\n \t\t\t\tmatch_src_port = true;\n@@ -16234,15 +16240,15 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev,\n \t\t\tcase MLX5_FLOW_FATE_SHARED_RSS:\n \t\t\tcase MLX5_FLOW_FATE_QUEUE:\n \t\t\t\thrxq = mlx5_ipool_get\n-\t\t\t\t(priv->sh->ipool[MLX5_IPOOL_HRXQ],\n-\t\t\t\tsub_policy->rix_hrxq[i]);\n+\t\t\t\t\t(priv->sh->ipool[MLX5_IPOOL_HRXQ],\n+\t\t\t\t\t sub_policy->rix_hrxq[i]);\n \t\t\t\tif (!hrxq) {\n \t\t\t\t\tDRV_LOG(ERR, \"Failed to find \"\n \t\t\t\t\t\t\"queue action for policy.\");\n \t\t\t\t\tgoto err_exit;\n \t\t\t\t}\n \t\t\t\tacts[i].dv_actions[acts[i].actions_n] =\n-\t\t\t\thrxq->action;\n+\t\t\t\t\thrxq->action;\n \t\t\t\tacts[i].actions_n++;\n \t\t\t\tbreak;\n \t\t\tcase MLX5_FLOW_FATE_MTR:\n@@ -16284,7 +16290,7 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev,\n \tif (__flow_dv_create_domain_policy_rules(dev, sub_policy,\n \t\t\t\tegress, transfer, match_src_port, acts)) {\n \t\tDRV_LOG(ERR,\n-\t\t\"Failed to create policy rules per domain.\");\n+\t\t\t\"Failed to create policy rules per domain.\");\n \t\tgoto err_exit;\n \t}\n \treturn 0;\n@@ -16321,8 +16327,8 @@ flow_dv_create_policy_rules(struct rte_eth_dev *dev,\n \t\t/* Prepare actions list and create policy rules. */\n \t\tif (__flow_dv_create_policy_acts_rules(dev, mtr_policy,\n \t\t\tmtr_policy->sub_policys[i][0], i)) {\n-\t\t\tDRV_LOG(ERR,\n-\t\t\t\"Failed to create policy action list per domain.\");\n+\t\t\tDRV_LOG(ERR, \"Failed to create policy action \"\n+\t\t\t\t\"list per domain.\");\n \t\t\treturn -1;\n \t\t}\n \t}\ndiff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c\nindex 73eba0dabd..a6bcb8dbb5 100644\n--- a/drivers/net/mlx5/mlx5_flow_meter.c\n+++ b/drivers/net/mlx5/mlx5_flow_meter.c\n@@ -686,21 +686,20 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,\n \tif (!priv->mtr_en)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n \t\t\t\t\t  RTE_MTR_ERROR_TYPE_METER_POLICY,\n-\t\t\t\t\t  NULL, \"meter policy unsupported.\");\n+\t\t\t\t\t  NULL, \"meter policy unsupported. \");\n \tif (policy_id == MLX5_INVALID_POLICY_ID)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n-\t\t\tRTE_MTR_ERROR_TYPE_METER_POLICY_ID, NULL,\n-\t\t\t\"policy ID is invalid. \");\n+\t\t\t\t\t  RTE_MTR_ERROR_TYPE_METER_POLICY_ID,\n+\t\t\t\t\t  NULL, \"policy ID is invalid. \");\n \tif (policy_id == priv->sh->mtrmng->def_policy_id)\n \t\treturn -rte_mtr_error_set(error, EEXIST,\n-\t\t\tRTE_MTR_ERROR_TYPE_METER_POLICY_ID, NULL,\n-\t\t\t\"policy ID exists. \");\n-\tmtr_policy = mlx5_flow_meter_policy_find(dev, policy_id,\n-\t\t\t\t&policy_idx);\n+\t\t\t\t\t  RTE_MTR_ERROR_TYPE_METER_POLICY_ID,\n+\t\t\t\t\t  NULL, \"default policy ID exists. \");\n+\tmtr_policy = mlx5_flow_meter_policy_find(dev, policy_id, &policy_idx);\n \tif (mtr_policy)\n \t\treturn -rte_mtr_error_set(error, EEXIST,\n-\t\t\tRTE_MTR_ERROR_TYPE_METER_POLICY_ID, NULL,\n-\t\t\t\"policy ID exists. \");\n+\t\t\t\t\t  RTE_MTR_ERROR_TYPE_METER_POLICY_ID,\n+\t\t\t\t\t  NULL, \"policy ID exists. \");\n \tret = mlx5_flow_validate_mtr_acts(dev, policy->actions, &attr,\n \t\t\t&is_rss, &domain_bitmap, &is_def_policy, error);\n \tif (ret)\n@@ -730,20 +729,30 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,\n \tfor (i = 0; i < MLX5_MTR_DOMAIN_MAX; i++) {\n \t\tif (!(domain_bitmap & (1 << i)))\n \t\t\tcontinue;\n+\t\t/*\n+\t\t * If RSS is found, it means that only the ingress domain can\n+\t\t * be supported. It is invalid to support RSS for one color\n+\t\t * and egress / transfer domain actions for another. Drop and\n+\t\t * jump action should have no impact.\n+\t\t */\n \t\tif (is_rss) {\n \t\t\tpolicy_size +=\n-\t\t\tsizeof(struct mlx5_flow_meter_sub_policy *) *\n-\t\t\tMLX5_MTR_RSS_MAX_SUB_POLICY;\n+\t\t\t\tsizeof(struct mlx5_flow_meter_sub_policy *) *\n+\t\t\t\tMLX5_MTR_RSS_MAX_SUB_POLICY;\n \t\t\tbreak;\n \t\t}\n \t\tpolicy_size += sizeof(struct mlx5_flow_meter_sub_policy *);\n \t}\n \tmtr_policy = mlx5_malloc(MLX5_MEM_ZERO, policy_size,\n-\t\t\t RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n+\t\t\t\t RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n \tif (!mtr_policy)\n \t\treturn -rte_mtr_error_set(error, ENOMEM,\n \t\t\t\tRTE_MTR_ERROR_TYPE_METER_POLICY, NULL,\n \t\t\t\t\"Memory alloc failed for meter policy.\");\n+\tif (policy_mode == MLX5_MTR_POLICY_MODE_OG)\n+\t\tmtr_policy->skip_y = 1;\n+\tif (policy_mode == MLX5_MTR_POLICY_MODE_OY)\n+\t\tmtr_policy->skip_g = 1;\n \tpolicy_size = sizeof(struct mlx5_flow_meter_policy);\n \tfor (i = 0; i < MLX5_MTR_DOMAIN_MAX; i++) {\n \t\tif (!(domain_bitmap & (1 << i)))\n@@ -756,10 +765,9 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,\n \t\t\tmtr_policy->transfer = 1;\n \t\tsub_policy = mlx5_ipool_zmalloc\n \t\t\t\t(priv->sh->ipool[MLX5_IPOOL_MTR_POLICY],\n-\t\t\t\t&sub_policy_idx);\n-\t\tif (!sub_policy)\n-\t\t\tgoto policy_add_err;\n-\t\tif (sub_policy_idx > MLX5_MAX_SUB_POLICY_TBL_NUM)\n+\t\t\t\t &sub_policy_idx);\n+\t\tif (!sub_policy ||\n+\t\t    sub_policy_idx > MLX5_MAX_SUB_POLICY_TBL_NUM)\n \t\t\tgoto policy_add_err;\n \t\tsub_policy->idx = sub_policy_idx;\n \t\tsub_policy->main_policy = mtr_policy;\n@@ -768,7 +776,7 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,\n \t\t\tsub_policy->main_policy_id = 1;\n \t\t}\n \t\tmtr_policy->sub_policys[i] =\n-\t\t(struct mlx5_flow_meter_sub_policy **)\n+\t\t\t(struct mlx5_flow_meter_sub_policy **)\n \t\t\t((uint8_t *)mtr_policy + policy_size);\n \t\tmtr_policy->sub_policys[i][0] = sub_policy;\n \t\tsub_policy_num = (mtr_policy->sub_policy_num >>\n@@ -780,11 +788,17 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,\n \t\tmtr_policy->sub_policy_num |=\n \t\t\t(sub_policy_num & MLX5_MTR_SUB_POLICY_NUM_MASK) <<\n \t\t\t(MLX5_MTR_SUB_POLICY_NUM_SHIFT * i);\n+\t\t/*\n+\t\t * If RSS is found, it means that only the ingress domain can\n+\t\t * be supported. It is invalid to support RSS for one color\n+\t\t * and egress / transfer domain actions for another. Drop and\n+\t\t * jump action should have no impact.\n+\t\t */\n \t\tif (is_rss) {\n \t\t\tmtr_policy->is_rss = 1;\n \t\t\tbreak;\n \t\t}\n-\t\tpolicy_size += sizeof(struct mlx5_flow_meter_sub_policy  *);\n+\t\tpolicy_size += sizeof(struct mlx5_flow_meter_sub_policy *);\n \t}\n \trte_spinlock_init(&mtr_policy->sl);\n \tret = mlx5_flow_create_mtr_acts(dev, mtr_policy,\n@@ -800,6 +814,10 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,\n \t\t\tgoto policy_add_err;\n \t\tskip_rule = (final_policy->is_rss || final_policy->is_queue);\n \t}\n+\t/*\n+\t * If either Green or Yellow has queue / RSS action, all the policy\n+\t * rules will be created later in the flow splitting stage.\n+\t */\n \tif (!is_rss && !mtr_policy->is_queue && !skip_rule) {\n \t\t/* Create policy rules in HW. */\n \t\tret = mlx5_flow_create_policy_rules(dev, mtr_policy);\n",
    "prefixes": [
        "v2",
        "3/7"
    ]
}