get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 136956,
    "url": "http://patches.dpdk.org/api/patches/136956/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240221102130.10124-3-dsosnowski@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": "<20240221102130.10124-3-dsosnowski@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240221102130.10124-3-dsosnowski@nvidia.com",
    "date": "2024-02-21T10:21:30",
    "name": "[v2,2/2] net/mlx5: add cross port meter mark action sharing",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "94729e05be751b07d595344ad7c5b7fd00b8e9f8",
    "submitter": {
        "id": 2386,
        "url": "http://patches.dpdk.org/api/people/2386/?format=api",
        "name": "Dariusz Sosnowski",
        "email": "dsosnowski@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/20240221102130.10124-3-dsosnowski@nvidia.com/mbox/",
    "series": [
        {
            "id": 31168,
            "url": "http://patches.dpdk.org/api/series/31168/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31168",
            "date": "2024-02-21T10:21:28",
            "name": "net/mlx5: add cross port meter mark action sharing",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/31168/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/136956/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/136956/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 9FF4843B61;\n\tWed, 21 Feb 2024 11:22:16 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3C06C406BA;\n\tWed, 21 Feb 2024 11:22:13 +0100 (CET)",
            "from NAM11-CO1-obe.outbound.protection.outlook.com\n (mail-co1nam11on2062.outbound.protection.outlook.com [40.107.220.62])\n by mails.dpdk.org (Postfix) with ESMTP id 22C3040691\n for <dev@dpdk.org>; Wed, 21 Feb 2024 11:22:11 +0100 (CET)",
            "from BYAPR02CA0011.namprd02.prod.outlook.com (2603:10b6:a02:ee::24)\n by CH3PR12MB8725.namprd12.prod.outlook.com (2603:10b6:610:170::14)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.21; Wed, 21 Feb\n 2024 10:22:06 +0000",
            "from SJ5PEPF000001D2.namprd05.prod.outlook.com\n (2603:10b6:a02:ee:cafe::83) by BYAPR02CA0011.outlook.office365.com\n (2603:10b6:a02:ee::24) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.41 via Frontend\n Transport; Wed, 21 Feb 2024 10:22:06 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n SJ5PEPF000001D2.mail.protection.outlook.com (10.167.242.54) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.7292.25 via Frontend Transport; Wed, 21 Feb 2024 10:22:05 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com\n (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 21 Feb\n 2024 02:21:51 -0800",
            "from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com\n (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12; Wed, 21 Feb\n 2024 02:21:49 -0800"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=YCGtwvu0x063EONT6yBkEDZx54pebu0DOC9c/az7kOqsxfxoRiDNYP8asnQ5DhilPuEgR2BtFEXi6WAXQqLbN9Fz/wVxYcoilsp9sYo4MYL31Nsyll6XqN3+qpQvKM4KdYI+/roUIGY5xppXvzBXadduSK8uH2r02tlornS96ujZ1NaCoN4dgBAgXtkNjxPMBtga4fOKcDSetC1/sabRJ7TNsO07m2YyWmKBfkZxD3EAm3Isjf0MhMuW+SnkJuNUWgNUjtctNVIQMqTM6a0jDMvNX4Ty0FWZcEM6Bfg1rQjsoKKcSBD4MINpxXjaKDrVt8YWUq/A8USI6sP6uXFnpg==",
        "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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=TSbM/9SjQdLS8o53S5DUrSCMafbDJrve0+DT3E0oB/I=;\n b=d4NZNXjaLuhPHwIXB+Ge9d2MZu/HhtIMdU7s/Cch59ElXC5Juggdsc2q9sWd0PoGskjRTyu7qgnzzjUSjnmg15Fx8poxW3ZMDhLKSu5O9ZkG8LounmM3JBb+CY/hGFO9h7uQtCsqJZ9mh0hVqnYoZ9spNhymvs87H5eCgY0Ow/DYej1brZN09m5mKczT/+LwRwtOeKuRm5KYx4Q1heTAtw2hruc1n+xeziMIFO6y7G8Cro/BeZXSsUncRY1MLsHkTAAh4dGp2BFMjAZobZKxlXwfGWDu06OuoSgD8/SfbnPYw9fVkBZMbPjRdymbR7T0nbEcQLD8klOVkp3YQuje8Q==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none (0)",
        "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=TSbM/9SjQdLS8o53S5DUrSCMafbDJrve0+DT3E0oB/I=;\n b=eXa3rXSH2iVFdlBGEjM42osbjBfMQbWZQxSGoHIZ+L/GyH3lJxkFbhZ2x87YFVqDrD5Ckom34oqNihUXmhjDJQ7ka1ehXnZqw6gOhkmxS/lJlz+d1EqIR2x+50fHs+ImEzRjIm41xvI8+N2hmyGH9e8VuBNXOVKuYcc8Wm3w8HwuRLJeFiVPBee1WXpFib7gL5RAWbm+XRkDVju0J4w7waJ2jdzC+2jVC5XtT7iT6+7+B8/n3p2KEwRzqzAvmnScGg8IbvCLSsZ1gHKbf4JcsYXbb6S8Wt7pTSHdaN876MQU9JpXZm/ybrBRke2upr1vTVQANU85Y4zR8qH4dgPi+g==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.160)\n smtp.mailfrom=nvidia.com;\n dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.160 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C",
        "From": "Dariusz Sosnowski <dsosnowski@nvidia.com>",
        "To": "Viacheslav Ovsiienko <viacheslavo@nvidia.com>, Ori Kam <orika@nvidia.com>,\n Suanming Mou <suanmingm@nvidia.com>, Matan Azrad <matan@nvidia.com>",
        "CC": "<dev@dpdk.org>",
        "Subject": "[PATCH v2 2/2] net/mlx5: add cross port meter mark action sharing",
        "Date": "Wed, 21 Feb 2024 12:21:30 +0200",
        "Message-ID": "<20240221102130.10124-3-dsosnowski@nvidia.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20240221102130.10124-1-dsosnowski@nvidia.com>",
        "References": "<20240221101327.9820-1-dsosnowski@nvidia.com>\n <20240221102130.10124-1-dsosnowski@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.231.35]",
        "X-ClientProxiedBy": "rnnvmail202.nvidia.com (10.129.68.7) To\n rnnvmail201.nvidia.com (10.129.68.8)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ5PEPF000001D2:EE_|CH3PR12MB8725:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "e743214f-ae76-42f0-9dbc-08dc32c6f409",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n B8n6xSY8UpcYDN/gVmzNUvRTY2SWRQ3L1sYyD09B63pYmF1wSC4mz2vug27l+Fk3IaiYd4b3pO3phUEnr/5/VFQNWxvGvxjoUG4ytbdLe1FqirpkQJTUhpT4vG2lKNdGkktEUb+bs/CEOti4ombqppenoT6r2NI6RZxLHUU2MJDQaT9f9ak0QkepqN/QqClG6Z/I3OMTijlZWGyMR2y2CuQvo5ITY/fNEM3Ly7cukKBf3ym7VWWBOLZZDt/3dm5KxCgS216r97031+vaYuKSj8L/eIKayVFxYGXkt09bT3Rae+lt7X3rzA1vf9fm4z/xN5I5PtmKlDvuvn/tBw84eUu9eNxAT1ZZXHNMe4KV6R7LmqyZKpxrXgnQkTN3zbmQZVJY4a6qlE9Lz73ht8eBHdb+8B5J/sTOINzYj9nnv6uFXYlLZPUMbkrjBu/TK+N0O+Ow4VqbOrxbc3HY8wAV67SATRKJZRqN9yBgWJRjIu02LwK/tevrH8pcoSOWZqBgCqCM9mUzsUz++gzCvoxqSQfeNFXRDe8r3ctL/9Ny3N3BoERmWMqwoTqptyxH643NUYz/qYHdTPRytkMbx+YW9P6xP+FdJqhd3X3ZvzMTDDa9TKnftpCxOV0GRq087lJZtwKa4RoyQRzfCy3WYyQXbw==",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE;\n SFS:(13230031)(36860700004)(46966006)(40470700004); DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "21 Feb 2024 10:22:05.7233 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n e743214f-ae76-42f0-9dbc-08dc32c6f409",
        "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.117.160];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n SJ5PEPF000001D2.namprd05.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CH3PR12MB8725",
        "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"
    },
    "content": "This patch adds support for sharing meter mark actions between multiple\nports of the same physical NIC.\n\nMeter objects pool, meter mark actions and meter profiles can be\ncreated only on the host port. Guest ports are allowed to use meter\nobjects created on the host port through indirect actions. Direct use\nof meter mark actions (e.g. putting meter mark action in actions\ntemplate), creation of indirect meters and meter profiles on the guest\nport is not allowed.\n\nSigned-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>\nAcked-by: Ori Kam <orika@nvidia.com>\n---\n doc/guides/rel_notes/release_24_03.rst |  3 +\n drivers/net/mlx5/mlx5_flow_hw.c        | 34 ++++++++----\n drivers/net/mlx5/mlx5_flow_meter.c     | 77 ++++++++++++++++++++++++++\n 3 files changed, 104 insertions(+), 10 deletions(-)\n\n--\n2.34.1",
    "diff": "diff --git a/doc/guides/rel_notes/release_24_03.rst b/doc/guides/rel_notes/release_24_03.rst\nindex 619459baae..2e73a7a37a 100644\n--- a/doc/guides/rel_notes/release_24_03.rst\n+++ b/doc/guides/rel_notes/release_24_03.rst\n@@ -133,6 +133,9 @@ New Features\n   * Added HW steering support for modify field ``RTE_FLOW_FIELD_ESP_SEQ_NUM`` flow action.\n   * Added HW steering support for modify field ``RTE_FLOW_FIELD_ESP_PROTO`` flow action.\n\n+  * Added support for sharing indirect action objects of type ``RTE_FLOW_ACTION_TYPE_METER_MARK``\n+    with HW steering flow engine.\n+\n\n Removed Items\n -------------\ndiff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c\nindex 4d6b22c4e3..a6b2ef4863 100644\n--- a/drivers/net/mlx5/mlx5_flow_hw.c\n+++ b/drivers/net/mlx5/mlx5_flow_hw.c\n@@ -1545,7 +1545,8 @@ static rte_be32_t vlan_hdr_to_be32(const struct rte_flow_action *actions)\n static __rte_always_inline struct mlx5_aso_mtr *\n flow_hw_meter_mark_alloc(struct rte_eth_dev *dev, uint32_t queue,\n \t\t\t const struct rte_flow_action *action,\n-\t\t\t void *user_data, bool push)\n+\t\t\t void *user_data, bool push,\n+\t\t\t struct rte_flow_error *error)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_aso_mtr_pool *pool = priv->hws_mpool;\n@@ -1554,6 +1555,11 @@ flow_hw_meter_mark_alloc(struct rte_eth_dev *dev, uint32_t queue,\n \tstruct mlx5_flow_meter_info *fm;\n \tuint32_t mtr_id;\n\n+\tif (priv->shared_host) {\n+\t\trte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,\n+\t\t\t\t   \"Meter mark actions can only be created on the host port\");\n+\t\treturn NULL;\n+\t}\n \tif (meter_mark->profile == NULL)\n \t\treturn NULL;\n \taso_mtr = mlx5_ipool_malloc(priv->hws_mpool->idx_pool, &mtr_id);\n@@ -1592,13 +1598,14 @@ flow_hw_meter_mark_compile(struct rte_eth_dev *dev,\n \t\t\t   const struct rte_flow_action *action,\n \t\t\t   struct mlx5dr_rule_action *acts,\n \t\t\t   uint32_t *index,\n-\t\t\t   uint32_t queue)\n+\t\t\t   uint32_t queue,\n+\t\t\t   struct rte_flow_error *error)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_aso_mtr_pool *pool = priv->hws_mpool;\n \tstruct mlx5_aso_mtr *aso_mtr;\n\n-\taso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, NULL, true);\n+\taso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, NULL, true, error);\n \tif (!aso_mtr)\n \t\treturn -1;\n\n@@ -2474,7 +2481,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,\n \t\t\t\t\t\t\t\t dr_pos, actions,\n \t\t\t\t\t\t\t\t acts->rule_acts,\n \t\t\t\t\t\t\t\t &acts->mtr_id,\n-\t\t\t\t\t\t\t\t MLX5_HW_INV_QUEUE);\n+\t\t\t\t\t\t\t\t MLX5_HW_INV_QUEUE,\n+\t\t\t\t\t\t\t\t error);\n \t\t\t\tif (err)\n \t\t\t\t\tgoto err;\n \t\t\t} else if (__flow_hw_act_data_general_append(priv, acts,\n@@ -3197,7 +3205,8 @@ flow_hw_actions_construct(struct rte_eth_dev *dev,\n \t\t\t */\n \t\t\tret = flow_hw_meter_mark_compile(dev,\n \t\t\t\tact_data->action_dst, action,\n-\t\t\t\trule_acts, &job->flow->mtr_id, MLX5_HW_INV_QUEUE);\n+\t\t\t\trule_acts, &job->flow->mtr_id,\n+\t\t\t\tMLX5_HW_INV_QUEUE, error);\n \t\t\tif (ret != 0)\n \t\t\t\treturn ret;\n \t\t\tbreak;\n@@ -5322,6 +5331,8 @@ flow_hw_validate_action_count(struct rte_eth_dev *dev,\n  *   Pointer to rte_eth_dev structure.\n  * @param[in] action\n  *   Pointer to the indirect action.\n+ * @param[in] indirect\n+ *   If true, then provided action was passed using an indirect action.\n  * @param[out] error\n  *   Pointer to error structure.\n  *\n@@ -5331,6 +5342,7 @@ flow_hw_validate_action_count(struct rte_eth_dev *dev,\n static int\n flow_hw_validate_action_meter_mark(struct rte_eth_dev *dev,\n \t\t\t      const struct rte_flow_action *action,\n+\t\t\t      bool indirect,\n \t\t\t      struct rte_flow_error *error)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n@@ -5341,6 +5353,9 @@ flow_hw_validate_action_meter_mark(struct rte_eth_dev *dev,\n \t\treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ACTION, action,\n \t\t\t\t\t  \"meter_mark action not supported\");\n+\tif (!indirect && priv->shared_host)\n+\t\treturn rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, action,\n+\t\t\t\t\t  \"meter_mark action can only be used on host port\");\n \tif (!priv->hws_mpool)\n \t\treturn rte_flow_error_set(error, EINVAL,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ACTION, action,\n@@ -5384,7 +5399,7 @@ flow_hw_validate_action_indirect(struct rte_eth_dev *dev,\n \ttype = mask->type;\n \tswitch (type) {\n \tcase RTE_FLOW_ACTION_TYPE_METER_MARK:\n-\t\tret = flow_hw_validate_action_meter_mark(dev, mask, error);\n+\t\tret = flow_hw_validate_action_meter_mark(dev, mask, true, error);\n \t\tif (ret < 0)\n \t\t\treturn ret;\n \t\t*action_flags |= MLX5_FLOW_ACTION_METER;\n@@ -5841,8 +5856,7 @@ mlx5_flow_hw_actions_validate(struct rte_eth_dev *dev,\n \t\t\taction_flags |= MLX5_FLOW_ACTION_METER;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_METER_MARK:\n-\t\t\tret = flow_hw_validate_action_meter_mark(dev, action,\n-\t\t\t\t\t\t\t\t error);\n+\t\t\tret = flow_hw_validate_action_meter_mark(dev, action, false, error);\n \t\t\tif (ret < 0)\n \t\t\t\treturn ret;\n \t\t\taction_flags |= MLX5_FLOW_ACTION_METER;\n@@ -10138,7 +10152,7 @@ flow_hw_action_handle_validate(struct rte_eth_dev *dev, uint32_t queue,\n \t\t\t\t\t\t  \"CT pool not initialized\");\n \t\treturn mlx5_validate_action_ct(dev, action->conf, error);\n \tcase RTE_FLOW_ACTION_TYPE_METER_MARK:\n-\t\treturn flow_hw_validate_action_meter_mark(dev, action, error);\n+\t\treturn flow_hw_validate_action_meter_mark(dev, action, true, error);\n \tcase RTE_FLOW_ACTION_TYPE_RSS:\n \t\treturn flow_dv_action_validate(dev, conf, action, error);\n \tcase RTE_FLOW_ACTION_TYPE_QUOTA:\n@@ -10297,7 +10311,7 @@ flow_hw_action_handle_create(struct rte_eth_dev *dev, uint32_t queue,\n \t\tbreak;\n \tcase RTE_FLOW_ACTION_TYPE_METER_MARK:\n \t\taso = true;\n-\t\taso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, job, push);\n+\t\taso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, job, push, error);\n \t\tif (!aso_mtr)\n \t\t\tbreak;\n \t\tmtr_id = (MLX5_INDIRECT_ACTION_TYPE_METER_MARK <<\ndiff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c\nindex 9cb4614436..c0578ce6e9 100644\n--- a/drivers/net/mlx5/mlx5_flow_meter.c\n+++ b/drivers/net/mlx5/mlx5_flow_meter.c\n@@ -17,11 +17,32 @@\n\n #ifdef HAVE_MLX5_HWS_SUPPORT\n\n+static void\n+mlx5_flow_meter_uninit_guest(struct rte_eth_dev *dev)\n+{\n+\tstruct mlx5_priv *priv = dev->data->dev_private;\n+\n+\tif (priv->hws_mpool) {\n+\t\tif (priv->hws_mpool->action) {\n+\t\t\tclaim_zero(mlx5dr_action_destroy(priv->hws_mpool->action));\n+\t\t\tpriv->hws_mpool->action = NULL;\n+\t\t}\n+\t\tpriv->hws_mpool->devx_obj = NULL;\n+\t\tpriv->hws_mpool->idx_pool = NULL;\n+\t\tmlx5_free(priv->hws_mpool);\n+\t\tpriv->hws_mpool = NULL;\n+\t}\n+}\n+\n void\n mlx5_flow_meter_uninit(struct rte_eth_dev *dev)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n\n+\tif (priv->shared_host) {\n+\t\tmlx5_flow_meter_uninit_guest(dev);\n+\t\treturn;\n+\t}\n \tif (priv->mtr_policy_arr) {\n \t\tmlx5_free(priv->mtr_policy_arr);\n \t\tpriv->mtr_policy_arr = NULL;\n@@ -52,6 +73,54 @@ mlx5_flow_meter_uninit(struct rte_eth_dev *dev)\n \t}\n }\n\n+static int\n+mlx5_flow_meter_init_guest(struct rte_eth_dev *dev)\n+{\n+\tstruct mlx5_priv *priv = dev->data->dev_private;\n+\tstruct rte_eth_dev *host_dev = priv->shared_host;\n+\tstruct mlx5_priv *host_priv = host_dev->data->dev_private;\n+\tint reg_id = 0;\n+\tuint32_t flags;\n+\tint ret = 0;\n+\n+\tMLX5_ASSERT(priv->shared_host);\n+\treg_id = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, 0, NULL);\n+\tif (reg_id < 0) {\n+\t\trte_errno = ENOMEM;\n+\t\tret = -rte_errno;\n+\t\tDRV_LOG(ERR, \"Meter register is not available.\");\n+\t\tgoto err;\n+\t}\n+\tpriv->hws_mpool = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_aso_mtr_pool),\n+\t\t\t\t      RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n+\tif (!priv->hws_mpool) {\n+\t\trte_errno = ENOMEM;\n+\t\tret = -rte_errno;\n+\t\tDRV_LOG(ERR, \"Meter ipool allocation failed.\");\n+\t\tgoto err;\n+\t}\n+\tMLX5_ASSERT(host_priv->hws_mpool->idx_pool);\n+\tMLX5_ASSERT(host_priv->hws_mpool->devx_obj);\n+\tpriv->hws_mpool->idx_pool = host_priv->hws_mpool->idx_pool;\n+\tpriv->hws_mpool->devx_obj = host_priv->hws_mpool->devx_obj;\n+\tflags = MLX5DR_ACTION_FLAG_HWS_RX | MLX5DR_ACTION_FLAG_HWS_TX;\n+\tif (priv->sh->config.dv_esw_en && priv->master)\n+\t\tflags |= MLX5DR_ACTION_FLAG_HWS_FDB;\n+\tpriv->hws_mpool->action = mlx5dr_action_create_aso_meter\n+\t\t\t(priv->dr_ctx, (struct mlx5dr_devx_obj *)priv->hws_mpool->devx_obj,\n+\t\t\t reg_id - REG_C_0, flags);\n+\tif (!priv->hws_mpool->action) {\n+\t\trte_errno = ENOMEM;\n+\t\tret = -rte_errno;\n+\t\tDRV_LOG(ERR, \"Meter action creation failed.\");\n+\t\tgoto err;\n+\t}\n+\treturn 0;\n+err:\n+\tmlx5_flow_meter_uninit(dev);\n+\treturn ret;\n+}\n+\n int\n mlx5_flow_meter_init(struct rte_eth_dev *dev,\n \t\t     uint32_t nb_meters,\n@@ -81,6 +150,8 @@ mlx5_flow_meter_init(struct rte_eth_dev *dev,\n \t\t.type = \"mlx5_hw_mtr_mark_action\",\n \t};\n\n+\tif (priv->shared_host)\n+\t\treturn mlx5_flow_meter_init_guest(dev);\n \tif (!nb_meters) {\n \t\tret = ENOTSUP;\n \t\trte_flow_error_set(&error, ENOMEM,\n@@ -850,6 +921,9 @@ mlx5_flow_meter_profile_hws_add(struct rte_eth_dev *dev,\n \tstruct mlx5_flow_meter_profile *fmp;\n \tint ret;\n\n+\tif (priv->shared_host)\n+\t\treturn -rte_mtr_error_set(error, ENOTSUP, RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,\n+\t\t\t\t\t  \"Meter profiles cannot be created on guest port\");\n \tif (!priv->mtr_profile_arr)\n \t\treturn mlx5_flow_meter_profile_add(dev, meter_profile_id, profile, error);\n \t/* Check input params. */\n@@ -887,6 +961,9 @@ mlx5_flow_meter_profile_hws_delete(struct rte_eth_dev *dev,\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_flow_meter_profile *fmp;\n\n+\tif (priv->shared_host)\n+\t\treturn -rte_mtr_error_set(error, ENOTSUP, RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,\n+\t\t\t\t\t  \"Meter profiles cannot be destroyed through guest port\");\n \tif (!priv->mtr_profile_arr)\n \t\treturn mlx5_flow_meter_profile_delete(dev, meter_profile_id, error);\n \t/* Meter profile must exist. */\n",
    "prefixes": [
        "v2",
        "2/2"
    ]
}