get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 96017,
    "url": "http://patchwork.dpdk.org/api/patches/96017/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210718171817.23822-2-bingz@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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-2-bingz@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210718171817.23822-2-bingz@nvidia.com",
    "date": "2021-07-18T17:18:11",
    "name": "[v2,1/7] net/mlx5: handle yellow case in default meter policy",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a7878c694123a1700ca401c38f0344129691d6a9",
    "submitter": {
        "id": 1976,
        "url": "http://patchwork.dpdk.org/api/people/1976/?format=api",
        "name": "Bing Zhao",
        "email": "bingz@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patchwork.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20210718171817.23822-2-bingz@nvidia.com/mbox/",
    "series": [
        {
            "id": 17883,
            "url": "http://patchwork.dpdk.org/api/series/17883/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=17883",
            "date": "2021-07-18T17:18:10",
            "name": "support yellow color policy in mlx5",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/17883/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/96017/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/96017/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 9500FA0C46;\n\tSun, 18 Jul 2021 19:19:00 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 69DA5410EA;\n\tSun, 18 Jul 2021 19:19:00 +0200 (CEST)",
            "from NAM12-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam12on2079.outbound.protection.outlook.com [40.107.244.79])\n by mails.dpdk.org (Postfix) with ESMTP id 88C18410EA\n for <dev@dpdk.org>; Sun, 18 Jul 2021 19:18:58 +0200 (CEST)",
            "from BN0PR04CA0084.namprd04.prod.outlook.com (2603:10b6:408:ea::29)\n by SA0PR12MB4349.namprd12.prod.outlook.com (2603:10b6:806:98::21)\n with 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:18:54 +0000",
            "from BN8NAM11FT022.eop-nam11.prod.protection.outlook.com\n (2603:10b6:408:ea:cafe::e3) by BN0PR04CA0084.outlook.office365.com\n (2603:10b6:408:ea::29) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend\n Transport; Sun, 18 Jul 2021 17:18:54 +0000",
            "from mail.nvidia.com (216.228.112.34) by\n BN8NAM11FT022.mail.protection.outlook.com (10.13.176.112) 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:18:54 +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:50 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=i6LHaSH0/tD9TAL8CIWRmvofC4llFWaTBWowR5EiZmQucX9/7f5v3/Zjkpz1aAyZUuhDmNh1DozBo+qoQugn1ucAoysK91IoEzmSz/66cKrA6LRhfYt7IJlRtcpEBPz9lY7sOlDvqUACrq4HfLPPQdMfAasVzbWKXXcLAtITuaI370oA8B+kA0H1J8iwHGY2TuHKxPrUCiM0PGVNf4DmNW2Zyytbyd9DsktvpiI7gX77dAukIqFUKRXjyVmB/2T3RVU1JSRWIpAWv+2an5MHwY3kW4OUOozqt65x3psTjrMmX+ZwgbBwwpuVMAELnr492Sijz4uLON1uIr67dKJNRw==",
        "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=B8XXxDru7DNlMCK9eFtgRyvFljEs9p/gq7HYIHhSOgk=;\n b=BzbIgjrbvpOMAHLOUDKLRtN81xxqNiN/TLDpsOLWp59Ul0SzASk6t/jW3dkvv5SD3Ru8HZW0CTjFFkq05QXUhKpcFwmn8Y2E92lh7pEonNNMrqE9L77ywyjc9GxxP1D2deOpRDbBrVrOsPQLsNviAEhxjXlq/GGejdxZ7NDENbNiFlYpxnajMn9KtV3SwfZ+IJgRPbOHyVNJ9hbfrrZexJvCwDvljShzcrMT/hHfkBZxSAg7Yua6LH+5Vm39Agwzu/VDDwK1Nhx49BhgQj49I+kkaruPcITZxuV1TRKHs7cwFJeIKhYpRVns9EzrO1oJ/a3Sq09PNxn0ctDFr9LwXg==",
        "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=B8XXxDru7DNlMCK9eFtgRyvFljEs9p/gq7HYIHhSOgk=;\n b=Y7+xpLiDE3r8C6GdteoSIV6T5KGt51DI9j0S/xPN1S/N1tNVEacdRlXdC9pGAQvePUWglGbDkChc+mYWgLwLP78iXuyZ+vtF3yEgO0H8QHLUQsl/rlz7y0VKntqI24onmkcrDM5ZNVi9SMiWE07j7ElKAXl2O3O879ySl/mN0B4lYE5mxh9fCDaoaWnqBKw/h5j6sOD+tfH/CNtTF7LMXNyEABqJCrAQLYMGTom4sd3zYQDztru4adc4Izc4MTMAVX6HwJn1GHDOnJ+SXeCUBk96JWhEYx+UVe1tuJt9lgL4Roc0h7P7RF3usHVg6tzXUuUBP0Yv9xHQrixlOjP+nw==",
        "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:11 +0300",
        "Message-ID": "<20210718171817.23822-2-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": "aaa16e39-8194-48ad-1d67-08d94a101ea7",
        "X-MS-TrafficTypeDiagnostic": "SA0PR12MB4349:",
        "X-LD-Processed": "43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr",
        "X-Microsoft-Antispam-PRVS": "\n <SA0PR12MB434972B15CB5337B28F5A6D5D0E09@SA0PR12MB4349.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:4714;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n o/89uvJH3OsBUzyfggffwInR9ON2at1BF07iY2WEwRfF8Oa2x30Cgd9J5Qs3j5rKrXnYLJsBG0KVlDiCdJ9Jo29U+YICPhIAxMBUmVzEJK0Ps+7DgBCLmKqBne5APdmuxFRvJpVc5NlcBcQxG7k5OvhO+ZbbmBNxshju+x0jfZU8Pa7BOWix1DjeWwTBHCBWfzBB9xYIQh2W/0yiJXcxwp3SFGdlroPU8x4eAjo+3k/szbiBPpTVaK4bNTsZofFXn2uJwEJ28GDCeVr+H0aqEUyRF2V8VjpnmTjG0/8LZ6YA5iTl1CMioOHBEcQVHr0ZYJzbzvgK0K9RQSQCgf5eR6ittRDh2sH01IXiWruOavUUXC8qWENhRuEKmjZUAWGWkg6aerQFWbm3NFtLzB3N01g7pjm7XF8LoAg9nTCBlxK7mOiqioUWFMilZ2f94c+YOBN/0b4iwMGPsBPy/x8IBxgsIvB+XceVXQROYZMnr6FYhMhx4ksWQ8+oq2SUZOVAKxHKJ4v5hwBFDJxULX1zNz6tyeH18C2K6ZXKjutax0U44GEKynmOEcrmmZ/lq8PWCGa5FvGGOmdZqz9gtO38gRkMyvhBWmd8Uk7PzbeVLeBwAjQL98prRwGqEn8YEcjemyKLCTyTwsYSEMVqvKDUONFY40xebbn21j/t5pzfVpPT2gZ9fjkljUrfr1rkOCExlijVKTCQoGwBi0ss2xMojvIhINKQvL4ZLY0E5laSqE4=",
        "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)(376002)(396003)(136003)(346002)(39860400002)(36840700001)(46966006)(82740400003)(316002)(110136005)(36756003)(83380400001)(6636002)(8676002)(47076005)(30864003)(1076003)(7696005)(54906003)(356005)(336012)(36906005)(26005)(2616005)(86362001)(36860700001)(426003)(107886003)(6666004)(34020700004)(2906002)(70206006)(4326008)(7636003)(82310400003)(8936002)(55016002)(6286002)(70586007)(478600001)(16526019)(5660300002)(186003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "18 Jul 2021 17:18:54.2057 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n aaa16e39-8194-48ad-1d67-08d94a101ea7",
        "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 BN8NAM11FT022.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SA0PR12MB4349",
        "Subject": "[dpdk-dev] [PATCH v2 1/7] net/mlx5: handle yellow case in default\n meter policy",
        "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": "In order to support the yellow color for the default meter policy,\nthe default policy action for yellow should be created together\nwith the green policy.\n\nThe default policy action for yellow action is the same as that for\ngreen. In the same table, the same matcher will be reused for yellow\nand the destination group will be the same.\n\nSigned-off-by: Bing Zhao <bingz@nvidia.com>\n---\n drivers/net/mlx5/mlx5.h         |   6 ++\n drivers/net/mlx5/mlx5_flow_dv.c | 144 +++++++++++++++++++-------------\n 2 files changed, 93 insertions(+), 57 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex 94618e10fa..791696caf4 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -641,6 +641,12 @@ struct mlx5_dev_shared_port {\n #define MLX5_MTR_TABLE_ID_SUFFIX 1\n /* Drop table_id on MLX5_FLOW_TABLE_LEVEL_METER. */\n #define MLX5_MTR_TABLE_ID_DROP 2\n+/* Priority of the meter policy matcher. */\n+#define MLX5_MTR_POLICY_MATCHER_PRIO 0\n+/* Default policy. */\n+#define MLX5_MTR_POLICY_MODE_DEF 1\n+/* Only green color valid. */\n+#define MLX5_MTR_POLICY_MODE_OG 2\n \n enum mlx5_meter_domain {\n \tMLX5_MTR_DOMAIN_INGRESS,\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex d250486950..cfc646c5e5 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -188,7 +188,7 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr,\n \tattr->valid = 1;\n }\n \n-/**\n+/*\n  * Convert rte_mtr_color to mlx5 color.\n  *\n  * @param[in] rcol\n@@ -197,7 +197,7 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr,\n  * @return\n  *   mlx5 color.\n  */\n-static int\n+static inline int\n rte_col_2_mlx5_col(enum rte_color rcol)\n {\n \tswitch (rcol) {\n@@ -15892,7 +15892,7 @@ flow_dv_destroy_mtr_drop_tbls(struct rte_eth_dev *dev)\n \n static void\n __flow_dv_destroy_domain_def_policy(struct rte_eth_dev *dev,\n-\t\t\t      enum mlx5_meter_domain domain)\n+\t\t\t\t    enum mlx5_meter_domain domain)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_flow_meter_def_policy *def_policy =\n@@ -15943,21 +15943,20 @@ __flow_dv_create_policy_flow(struct rte_eth_dev *dev,\n \tif (match_src_port && (priv->representor || priv->master)) {\n \t\tif (flow_dv_translate_item_port_id(dev, matcher.buf,\n \t\t\t\t\t\t   value.buf, item, attr)) {\n-\t\t\tDRV_LOG(ERR,\n-\t\t\t\"Failed to create meter policy flow with port.\");\n+\t\t\tDRV_LOG(ERR, \"Failed to create meter policy%d flow's\"\n+\t\t\t\t\" value with port.\", color);\n \t\t\treturn -1;\n \t\t}\n \t}\n \tflow_dv_match_meta_reg(matcher.buf, value.buf,\n-\t\t\t\t(enum modify_reg)color_reg_c_idx,\n-\t\t\t\trte_col_2_mlx5_col(color),\n-\t\t\t\tUINT32_MAX);\n+\t\t\t       (enum modify_reg)color_reg_c_idx,\n+\t\t\t       rte_col_2_mlx5_col(color), UINT32_MAX);\n \tmisc_mask = flow_dv_matcher_enable(value.buf);\n \t__flow_dv_adjust_buf_size(&value.size, misc_mask);\n-\tret = mlx5_flow_os_create_flow(matcher_object,\n-\t\t\t(void *)&value, actions_n, actions, rule);\n+\tret = mlx5_flow_os_create_flow(matcher_object, (void *)&value,\n+\t\t\t\t       actions_n, actions, rule);\n \tif (ret) {\n-\t\tDRV_LOG(ERR, \"Failed to create meter policy flow.\");\n+\t\tDRV_LOG(ERR, \"Failed to create meter policy%d flow.\", color);\n \t\treturn -1;\n \t}\n \treturn 0;\n@@ -15991,13 +15990,13 @@ __flow_dv_create_policy_matcher(struct rte_eth_dev *dev,\n \t};\n \tstruct mlx5_flow_tbl_data_entry *tbl_data;\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tuint32_t color_mask = (UINT32_C(1) << MLX5_MTR_COLOR_BITS) - 1;\n+\tconst uint32_t color_mask = (UINT32_C(1) << MLX5_MTR_COLOR_BITS) - 1;\n \n \tif (match_src_port && (priv->representor || priv->master)) {\n \t\tif (flow_dv_translate_item_port_id(dev, matcher.mask.buf,\n \t\t\t\t\t\t   value.buf, item, attr)) {\n-\t\t\tDRV_LOG(ERR,\n-\t\t\t\"Failed to register meter drop matcher with port.\");\n+\t\t\tDRV_LOG(ERR, \"Failed to register meter policy%d matcher\"\n+\t\t\t\t\" with port.\", priority);\n \t\t\treturn -1;\n \t\t}\n \t}\n@@ -16007,7 +16006,7 @@ __flow_dv_create_policy_matcher(struct rte_eth_dev *dev,\n \t\t\t(enum modify_reg)color_reg_c_idx, 0, color_mask);\n \tmatcher.priority = priority;\n \tmatcher.crc = rte_raw_cksum((const void *)matcher.mask.buf,\n-\t\t\t\t\tmatcher.mask.size);\n+\t\t\t\t    matcher.mask.size);\n \tentry = mlx5_list_register(tbl_data->matchers, &ctx);\n \tif (!entry) {\n \t\tDRV_LOG(ERR, \"Failed to register meter drop matcher.\");\n@@ -16055,6 +16054,8 @@ __flow_dv_create_domain_policy_rules(struct rte_eth_dev *dev,\n \tint i;\n \tint ret = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, 0, &flow_err);\n \tstruct mlx5_sub_policy_color_rule *color_rule;\n+\tbool svport_match;\n+\tstruct mlx5_sub_policy_color_rule *tmp_rules[RTE_COLORS] = {NULL};\n \n \tif (ret < 0)\n \t\treturn -1;\n@@ -16073,7 +16074,7 @@ __flow_dv_create_domain_policy_rules(struct rte_eth_dev *dev,\n \tcolor_reg_c_idx = ret;\n \tfor (i = 0; i < RTE_COLORS; i++) {\n \t\tTAILQ_INIT(&sub_policy->color_rules[i]);\n-\t\tif (i == RTE_COLOR_YELLOW || !acts[i].actions_n)\n+\t\tif (!acts[i].actions_n)\n \t\t\tcontinue;\n \t\tcolor_rule = mlx5_malloc(MLX5_MEM_ZERO,\n \t\t\t\tsizeof(struct mlx5_sub_policy_color_rule),\n@@ -16082,45 +16083,52 @@ __flow_dv_create_domain_policy_rules(struct rte_eth_dev *dev,\n \t\t\tDRV_LOG(ERR, \"No memory to create color rule.\");\n \t\t\tgoto err_exit;\n \t\t}\n+\t\ttmp_rules[i] = color_rule;\n+\t\tTAILQ_INSERT_TAIL(&sub_policy->color_rules[i],\n+\t\t\t\t  color_rule, next_port);\n \t\tcolor_rule->src_port = priv->representor_id;\n+\t\t/* No use. */\n \t\tattr.priority = i;\n-\t\t/* Create matchers for Color. */\n-\t\tif (__flow_dv_create_policy_matcher(dev,\n-\t\t\t\tcolor_reg_c_idx, i, sub_policy, &attr,\n-\t\t\t\t(i != RTE_COLOR_RED ? match_src_port : false),\n-\t\t\t\tNULL, &color_rule->matcher, &flow_err)) {\n-\t\t\tDRV_LOG(ERR, \"Failed to create color matcher.\");\n+\t\t/* Create matchers for colors. */\n+\t\tsvport_match = (i != RTE_COLOR_RED) ? match_src_port : false;\n+\t\tif (__flow_dv_create_policy_matcher(dev, color_reg_c_idx,\n+\t\t\t\tMLX5_MTR_POLICY_MATCHER_PRIO, sub_policy,\n+\t\t\t\t&attr, svport_match, NULL,\n+\t\t\t\t&color_rule->matcher, &flow_err)) {\n+\t\t\tDRV_LOG(ERR, \"Failed to create color%u matcher.\", i);\n \t\t\tgoto err_exit;\n \t\t}\n \t\t/* Create flow, matching color. */\n \t\tif (__flow_dv_create_policy_flow(dev,\n \t\t\t\tcolor_reg_c_idx, (enum rte_color)i,\n \t\t\t\tcolor_rule->matcher->matcher_object,\n-\t\t\t\tacts[i].actions_n,\n-\t\t\t\tacts[i].dv_actions,\n-\t\t\t\t(i != RTE_COLOR_RED ? match_src_port : false),\n-\t\t\t\tNULL, &color_rule->rule,\n+\t\t\t\tacts[i].actions_n, acts[i].dv_actions,\n+\t\t\t\tsvport_match, NULL, &color_rule->rule,\n \t\t\t\t&attr)) {\n-\t\t\tDRV_LOG(ERR, \"Failed to create color rule.\");\n+\t\t\tDRV_LOG(ERR, \"Failed to create color%u rule.\", i);\n \t\t\tgoto err_exit;\n \t\t}\n-\t\tTAILQ_INSERT_TAIL(&sub_policy->color_rules[i],\n-\t\t\t\t  color_rule, next_port);\n \t}\n \treturn 0;\n err_exit:\n-\tif (color_rule) {\n-\t\tif (color_rule->rule)\n-\t\t\tmlx5_flow_os_destroy_flow(color_rule->rule);\n-\t\tif (color_rule->matcher) {\n-\t\t\tstruct mlx5_flow_tbl_data_entry *tbl =\n-\t\t\t\tcontainer_of(color_rule->matcher->tbl,\n-\t\t\t\t\t\ttypeof(*tbl), tbl);\n-\t\t\tmlx5_list_unregister(tbl->matchers,\n+\t/* All the policy rules will be cleared. */\n+\tdo {\n+\t\tcolor_rule = tmp_rules[i];\n+\t\tif (color_rule) {\n+\t\t\tif (color_rule->rule)\n+\t\t\t\tmlx5_flow_os_destroy_flow(color_rule->rule);\n+\t\t\tif (color_rule->matcher) {\n+\t\t\t\tstruct mlx5_flow_tbl_data_entry *tbl =\n+\t\t\t\t\tcontainer_of(color_rule->matcher->tbl,\n+\t\t\t\t\t\t     typeof(*tbl), tbl);\n+\t\t\t\tmlx5_list_unregister(tbl->matchers,\n \t\t\t\t\t\t&color_rule->matcher->entry);\n+\t\t\t}\n+\t\t\tTAILQ_REMOVE(&sub_policy->color_rules[i],\n+\t\t\t\t     color_rule, next_port);\n+\t\t\tmlx5_free(color_rule);\n \t\t}\n-\t\tmlx5_free(color_rule);\n-\t}\n+\t} while (i--);\n \treturn -1;\n }\n \n@@ -16342,8 +16350,7 @@ __flow_dv_create_domain_def_policy(struct rte_eth_dev *dev, uint32_t domain)\n \t\t\tsizeof(struct mlx5_flow_meter_def_policy),\n \t\t\tRTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n \t\tif (!def_policy) {\n-\t\t\tDRV_LOG(ERR, \"Failed to alloc \"\n-\t\t\t\t\t\"default policy table.\");\n+\t\t\tDRV_LOG(ERR, \"Failed to alloc default policy table.\");\n \t\t\tgoto def_policy_error;\n \t\t}\n \t\tmtrmng->def_policy[domain] = def_policy;\n@@ -16359,26 +16366,48 @@ __flow_dv_create_domain_def_policy(struct rte_eth_dev *dev, uint32_t domain)\n \t\t}\n \t\tdef_policy->sub_policy.jump_tbl[RTE_COLOR_GREEN] = jump_tbl;\n \t\ttbl_data = container_of(jump_tbl,\n-\t\t\t\tstruct mlx5_flow_tbl_data_entry, tbl);\n+\t\t\t\t\tstruct mlx5_flow_tbl_data_entry, tbl);\n \t\tdef_policy->dr_jump_action[RTE_COLOR_GREEN] =\n \t\t\t\t\t\ttbl_data->jump.action;\n-\t\tacts[RTE_COLOR_GREEN].dv_actions[0] =\n-\t\t\t\t\t\ttbl_data->jump.action;\n+\t\tacts[RTE_COLOR_GREEN].dv_actions[0] = tbl_data->jump.action;\n \t\tacts[RTE_COLOR_GREEN].actions_n = 1;\n+\t\t/*\n+\t\t * YELLOW has the same default policy as GREEN does.\n+\t\t * G & Y share the same table and action. The 2nd time of table\n+\t\t * resource getting is just to update the reference count for\n+\t\t * the releasing stage.\n+\t\t */\n+\t\tjump_tbl = flow_dv_tbl_resource_get(dev,\n+\t\t\t\tMLX5_FLOW_TABLE_LEVEL_METER,\n+\t\t\t\tegress, transfer, false, NULL, 0,\n+\t\t\t\t0, MLX5_MTR_TABLE_ID_SUFFIX, &error);\n+\t\tif (!jump_tbl) {\n+\t\t\tDRV_LOG(ERR,\n+\t\t\t\t\"Failed to get meter suffix table.\");\n+\t\t\tgoto def_policy_error;\n+\t\t}\n+\t\tdef_policy->sub_policy.jump_tbl[RTE_COLOR_YELLOW] = jump_tbl;\n+\t\ttbl_data = container_of(jump_tbl,\n+\t\t\t\t\tstruct mlx5_flow_tbl_data_entry, tbl);\n+\t\tdef_policy->dr_jump_action[RTE_COLOR_YELLOW] =\n+\t\t\t\t\t\ttbl_data->jump.action;\n+\t\tacts[RTE_COLOR_YELLOW].dv_actions[0] = tbl_data->jump.action;\n+\t\tacts[RTE_COLOR_YELLOW].actions_n = 1;\n \t\t/* Create jump action to the drop table. */\n \t\tif (!mtrmng->drop_tbl[domain]) {\n \t\t\tmtrmng->drop_tbl[domain] = flow_dv_tbl_resource_get\n \t\t\t\t(dev, MLX5_FLOW_TABLE_LEVEL_METER,\n-\t\t\t\tegress, transfer, false, NULL, 0,\n-\t\t\t\t0, MLX5_MTR_TABLE_ID_DROP, &error);\n+\t\t\t\t egress, transfer, false, NULL, 0,\n+\t\t\t\t 0, MLX5_MTR_TABLE_ID_DROP, &error);\n \t\t\tif (!mtrmng->drop_tbl[domain]) {\n-\t\t\t\tDRV_LOG(ERR, \"Failed to create \"\n-\t\t\t\t\"meter drop table for default policy.\");\n+\t\t\t\tDRV_LOG(ERR, \"Failed to create meter \"\n+\t\t\t\t\t\"drop table for default policy.\");\n \t\t\t\tgoto def_policy_error;\n \t\t\t}\n \t\t}\n+\t\t/* all RED: unique Drop table for jump action. */\n \t\ttbl_data = container_of(mtrmng->drop_tbl[domain],\n-\t\t\t\tstruct mlx5_flow_tbl_data_entry, tbl);\n+\t\t\t\t\tstruct mlx5_flow_tbl_data_entry, tbl);\n \t\tdef_policy->dr_jump_action[RTE_COLOR_RED] =\n \t\t\t\t\t\ttbl_data->jump.action;\n \t\tacts[RTE_COLOR_RED].dv_actions[0] = tbl_data->jump.action;\n@@ -16388,15 +16417,14 @@ __flow_dv_create_domain_def_policy(struct rte_eth_dev *dev, uint32_t domain)\n \t\t\t\t\t&def_policy->sub_policy,\n \t\t\t\t\tegress, transfer, false, acts);\n \t\tif (ret) {\n-\t\t\tDRV_LOG(ERR, \"Failed to create \"\n-\t\t\t\t\"default policy rules.\");\n-\t\t\t\tgoto def_policy_error;\n+\t\t\tDRV_LOG(ERR, \"Failed to create default policy rules.\");\n+\t\t\tgoto def_policy_error;\n \t\t}\n \t}\n \treturn 0;\n def_policy_error:\n \t__flow_dv_destroy_domain_def_policy(dev,\n-\t\t\t(enum mlx5_meter_domain)domain);\n+\t\t\t\t\t    (enum mlx5_meter_domain)domain);\n \treturn -1;\n }\n \n@@ -16419,8 +16447,9 @@ flow_dv_create_def_policy(struct rte_eth_dev *dev)\n \t\tif (!priv->config.dv_esw_en && i == MLX5_MTR_DOMAIN_TRANSFER)\n \t\t\tcontinue;\n \t\tif (__flow_dv_create_domain_def_policy(dev, i)) {\n-\t\t\tDRV_LOG(ERR,\n-\t\t\t\"Failed to create default policy\");\n+\t\t\tDRV_LOG(ERR, \"Failed to create default policy\");\n+\t\t\t/* Rollback the created default policies for others. */\n+\t\t\tflow_dv_destroy_def_policy(dev);\n \t\t\treturn -1;\n \t\t}\n \t}\n@@ -16934,8 +16963,9 @@ flow_dv_meter_hierarchy_rule_create(struct rte_eth_dev *dev,\n \t\t\tgoto err_exit;\n \t\t}\n \t\tif (__flow_dv_create_policy_matcher(dev, color_reg_c_idx,\n-\t\t\t\t\ti, sub_policy, &attr, true, item,\n-\t\t\t\t\t&color_rule->matcher, error)) {\n+\t\t\t\tMLX5_MTR_POLICY_MATCHER_PRIO, sub_policy,\n+\t\t\t\t&attr, true, item,\n+\t\t\t\t&color_rule->matcher, error)) {\n \t\t\trte_flow_error_set(error, errno,\n \t\t\t\tRTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,\n \t\t\t\t\"Failed to create hierarchy meter matcher.\");\n",
    "prefixes": [
        "v2",
        "1/7"
    ]
}