get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 95065,
    "url": "https://patches.dpdk.org/api/patches/95065/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210630124609.8711-12-suanmingm@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": "<20210630124609.8711-12-suanmingm@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210630124609.8711-12-suanmingm@nvidia.com",
    "date": "2021-06-30T12:45:58",
    "name": "[v2,11/22] net/mlx5: allocate list memory by the create API",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c0228ed9ad170aa4699239f91d42a18e094ee15b",
    "submitter": {
        "id": 1887,
        "url": "https://patches.dpdk.org/api/people/1887/?format=api",
        "name": "Suanming Mou",
        "email": "suanmingm@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/20210630124609.8711-12-suanmingm@nvidia.com/mbox/",
    "series": [
        {
            "id": 17549,
            "url": "https://patches.dpdk.org/api/series/17549/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17549",
            "date": "2021-06-30T12:45:47",
            "name": "net/mlx5: insertion rate optimization",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/17549/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/95065/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/95065/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 C0642A0A0F;\n\tWed, 30 Jun 2021 14:47:57 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5AF18412AC;\n\tWed, 30 Jun 2021 14:47:01 +0200 (CEST)",
            "from NAM02-BN1-obe.outbound.protection.outlook.com\n (mail-bn1nam07on2048.outbound.protection.outlook.com [40.107.212.48])\n by mails.dpdk.org (Postfix) with ESMTP id ED46A4129A\n for <dev@dpdk.org>; Wed, 30 Jun 2021 14:46:57 +0200 (CEST)",
            "from BN6PR1701CA0004.namprd17.prod.outlook.com\n (2603:10b6:405:15::14) by DM6PR12MB4532.namprd12.prod.outlook.com\n (2603:10b6:5:2af::24) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Wed, 30 Jun\n 2021 12:46:56 +0000",
            "from BN8NAM11FT045.eop-nam11.prod.protection.outlook.com\n (2603:10b6:405:15:cafe::d0) by BN6PR1701CA0004.outlook.office365.com\n (2603:10b6:405:15::14) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend\n Transport; Wed, 30 Jun 2021 12:46:56 +0000",
            "from mail.nvidia.com (216.228.112.34) by\n BN8NAM11FT045.mail.protection.outlook.com (10.13.177.47) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4287.22 via Frontend Transport; Wed, 30 Jun 2021 12:46:55 +0000",
            "from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 30 Jun\n 2021 12:46:45 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=PLyWgkJnzq0A7OF+UcdDHUKEVVp1cAKvxBkc71f9eCxTGC4CkVguoJtzCVDFJC3cmulMmS+PG7WVjPhtrYarWHNKx1jpCGQKMBLuDnDrMYEs6PGIMRG4/zyxp88z0xrxWhaVQ20v7A3FU8w6wkQw1Gf/ZaRWoGS+Bp8zSKXu2tke3NooU609k+qBGb8YAv4yM8qIhFNxucN0ketaJ6aAqIyhGAguvLucSOqh35Cdqy+NMHlxlYPrzRaDZLp9JpMmCKHtj7Sdy1d0rvxwkujJBzi2+C0byRVA26xRe34ZrwaTo8Q7+yKGKedl2kUjwAoC3mlP+/Wm3qdIftJ3K7U/Kg==",
        "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=5mApXMDNEqEtyj/fneqiUhH9AbzEoj8kU/yAs1F1QqA=;\n b=mDWhARtxNQvkNtpA+N+ud96kKsj3UjMImKPvnY5URnVZiQT8YIkND58Ecwy4L3MFQRoOLsp0fQa42EbZbnJI2UoCGfB8Mf1CyHJg/sdsTL/yVPwyV8BavijoX73qCQc8YOK34uR7a91IMViSu3MXAomOtmicioxu5mvVBvP0p+7a/xd152IPIlyoIbzLLrxSGZdQkSNvC2apWNxYk+oWGMJM0GWCcWQTrlQFpvHJ91TdYUFWUAOa6G9ByElgFxCHRhe435JpAxwBpuUoEmGubFwlchwCpbCFzQ/OVjMhMGJf2pS4TNOX35avblKoo0bSoqWgAzq8StUuxmKR5ac+jw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=none 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=5mApXMDNEqEtyj/fneqiUhH9AbzEoj8kU/yAs1F1QqA=;\n b=iiNTiGAodOYGegCmp0d7Qt8RqkpTIPJdaIUYuVQshrIB0wKGnQCmU1q1VX6wZLMs7oqI3JMNEol9WzYCP6ux1ozJ6yNxYs6Iy/0pbd8eIFXgFslesflDiNupig/EOhjGTj4o6/P9/Zhn7Ndpgd4ifrKtx4F3Dk3k9gRIc1NQz3kEi0+88ndXeWAgE7/OEgagREbJIw2pwL+MSvRHvCxfmvzKx/NxSPZVrtRUG50h27nv44xt/NwW3TZSpxpSA7qSrC4cF0ttVn2yf0rAdQHBsgR7pJKS0JrAZO+S/HBrFe4D6VQhDs72Nxj236hc7TZy1vzg4h/Wsr9IuYLNTU38ig==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; 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": "Suanming Mou <suanmingm@nvidia.com>",
        "To": "<viacheslavo@nvidia.com>, <matan@nvidia.com>",
        "CC": "<rasland@nvidia.com>, <orika@nvidia.com>, <dev@dpdk.org>",
        "Date": "Wed, 30 Jun 2021 15:45:58 +0300",
        "Message-ID": "<20210630124609.8711-12-suanmingm@nvidia.com>",
        "X-Mailer": "git-send-email 2.18.1",
        "In-Reply-To": "<20210630124609.8711-1-suanmingm@nvidia.com>",
        "References": "<20210527093403.1153127-1-suanmingm@nvidia.com>\n <20210630124609.8711-1-suanmingm@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[172.20.187.6]",
        "X-ClientProxiedBy": "HQMAIL101.nvidia.com (172.20.187.10) To\n HQMAIL107.nvidia.com (172.20.187.13)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "716eafca-1517-4092-a49b-08d93bc524ab",
        "X-MS-TrafficTypeDiagnostic": "DM6PR12MB4532:",
        "X-Microsoft-Antispam-PRVS": "\n <DM6PR12MB4532FEDD7AB4A0377D689ECCC1019@DM6PR12MB4532.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:241;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n h+fpqUKwjjFiApqVElAk1V8GVzNyYbeBohCLlibz2jLZyjiE6TO+hA8AN8mIHZdMTLXVKHi6tL+6sE2VfkjQfPokI+h9ITwh56kyIQ6F0/2BdoFS616mQhDNivvJ9rmhPGrxkdU+QmWOmJsmDGfrqqcRwYzBuQo21GJ4tKUJMDVh3JTAGc9Jb/uIhVn8iwVZ+gKfn4n9LTPni/o8tAGXGjJJFI0h2LwRn/BqGd6BGZqCBZaPNDlskm7E0ARbO2+ZyVbeuRNQrvwEi0h9bx+CvNplgTzFNbOOqzK55HA0CLBjLgW+RaYx3tmCqAk7yOIfGY7VpUNdS4Aw5CX+zDTSLVc5k4VTriRu2JMyMto2+1gVgfCIf2yGnwpsSJcxRkUMMkneP2uBa2fDeCvl2d6FzvyBThXkQqrz9qpSjAETgAUDTqh7qgdsxbhcnBtUVGY/e74YPvKWLqec2V1GLHtFIqgnq+rqwlgSxCkh7L7n2opHn0rSjGjjNzUKQSEFbvGQTHE9Nswl1Eb0FrPvIsL06ruTo2bEM031AbSh6Xt+wnFNSwgB2zvSjFsoOBV+5bJqRo/lIesqY83Zb5uLaVXN8a5d3Wnk5raXAZH1eWBstXxXcMfSdoj21m1WzU7PoAobmiRaIYXZDTkOFTnKNEbgtCpeySvfh0BB1EwT8/qcXM9XJa/dkuJ/ZbKizIaS91UCrULCP+LBs2YMS6TaWcIh7A==",
        "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)(346002)(396003)(39860400002)(136003)(36840700001)(46966006)(6636002)(336012)(5660300002)(426003)(16526019)(86362001)(356005)(186003)(2616005)(47076005)(6666004)(1076003)(36756003)(8676002)(83380400001)(70206006)(70586007)(30864003)(7636003)(478600001)(82740400003)(36860700001)(4326008)(2906002)(7696005)(55016002)(8936002)(6286002)(82310400003)(54906003)(110136005)(26005)(316002);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Jun 2021 12:46:55.7671 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 716eafca-1517-4092-a49b-08d93bc524ab",
        "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 BN8NAM11FT045.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR12MB4532",
        "Subject": "[dpdk-dev] [PATCH v2 11/22] net/mlx5: allocate list memory by the\n create API",
        "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": "From: Matan Azrad <matan@nvidia.com>\n\nCurrently, the list memory was allocated by the list API caller.\n\nMove it to be allocated by the create API in order to save consistence\nwith the hlist utility.\n\nSigned-off-by: Matan Azrad <matan@nvidia.com>\nAcked-by: Suanming Mou <suanmingm@nvidia.com>\n---\n drivers/net/mlx5/linux/mlx5_os.c   | 105 ++++++++++++++++++++---------\n drivers/net/mlx5/mlx5.c            |   3 +-\n drivers/net/mlx5/mlx5.h            |  10 +--\n drivers/net/mlx5/mlx5_flow.h       |   2 +-\n drivers/net/mlx5/mlx5_flow_dv.c    |  56 ++++++++-------\n drivers/net/mlx5/mlx5_rxq.c        |   6 +-\n drivers/net/mlx5/mlx5_utils.c      |  19 ++++--\n drivers/net/mlx5/mlx5_utils.h      |  15 ++---\n drivers/net/mlx5/windows/mlx5_os.c |   2 +-\n 9 files changed, 137 insertions(+), 81 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c\nindex 8a043526da..87b63d852b 100644\n--- a/drivers/net/mlx5/linux/mlx5_os.c\n+++ b/drivers/net/mlx5/linux/mlx5_os.c\n@@ -274,36 +274,44 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)\n #ifdef HAVE_IBV_FLOW_DV_SUPPORT\n \t/* Init port id action list. */\n \tsnprintf(s, sizeof(s), \"%s_port_id_action_list\", sh->ibdev_name);\n-\tmlx5_list_create(&sh->port_id_action_list, s, sh,\n-\t\t\t flow_dv_port_id_create_cb,\n-\t\t\t flow_dv_port_id_match_cb,\n-\t\t\t flow_dv_port_id_remove_cb,\n-\t\t\t flow_dv_port_id_clone_cb,\n-\t\t\t flow_dv_port_id_clone_free_cb);\n+\tsh->port_id_action_list = mlx5_list_create(s, sh,\n+\t\t\t\t\t\t   flow_dv_port_id_create_cb,\n+\t\t\t\t\t\t   flow_dv_port_id_match_cb,\n+\t\t\t\t\t\t   flow_dv_port_id_remove_cb,\n+\t\t\t\t\t\t   flow_dv_port_id_clone_cb,\n+\t\t\t\t\t\t flow_dv_port_id_clone_free_cb);\n+\tif (!sh->port_id_action_list)\n+\t\tgoto error;\n \t/* Init push vlan action list. */\n \tsnprintf(s, sizeof(s), \"%s_push_vlan_action_list\", sh->ibdev_name);\n-\tmlx5_list_create(&sh->push_vlan_action_list, s, sh,\n-\t\t\t flow_dv_push_vlan_create_cb,\n-\t\t\t flow_dv_push_vlan_match_cb,\n-\t\t\t flow_dv_push_vlan_remove_cb,\n-\t\t\t flow_dv_push_vlan_clone_cb,\n-\t\t\t flow_dv_push_vlan_clone_free_cb);\n+\tsh->push_vlan_action_list = mlx5_list_create(s, sh,\n+\t\t\t\t\t\t    flow_dv_push_vlan_create_cb,\n+\t\t\t\t\t\t    flow_dv_push_vlan_match_cb,\n+\t\t\t\t\t\t    flow_dv_push_vlan_remove_cb,\n+\t\t\t\t\t\t    flow_dv_push_vlan_clone_cb,\n+\t\t\t\t\t       flow_dv_push_vlan_clone_free_cb);\n+\tif (!sh->push_vlan_action_list)\n+\t\tgoto error;\n \t/* Init sample action list. */\n \tsnprintf(s, sizeof(s), \"%s_sample_action_list\", sh->ibdev_name);\n-\tmlx5_list_create(&sh->sample_action_list, s, sh,\n-\t\t\t flow_dv_sample_create_cb,\n-\t\t\t flow_dv_sample_match_cb,\n-\t\t\t flow_dv_sample_remove_cb,\n-\t\t\t flow_dv_sample_clone_cb,\n-\t\t\t flow_dv_sample_clone_free_cb);\n+\tsh->sample_action_list = mlx5_list_create(s, sh,\n+\t\t\t\t\t\t  flow_dv_sample_create_cb,\n+\t\t\t\t\t\t  flow_dv_sample_match_cb,\n+\t\t\t\t\t\t  flow_dv_sample_remove_cb,\n+\t\t\t\t\t\t  flow_dv_sample_clone_cb,\n+\t\t\t\t\t\t  flow_dv_sample_clone_free_cb);\n+\tif (!sh->sample_action_list)\n+\t\tgoto error;\n \t/* Init dest array action list. */\n \tsnprintf(s, sizeof(s), \"%s_dest_array_list\", sh->ibdev_name);\n-\tmlx5_list_create(&sh->dest_array_list, s, sh,\n-\t\t\t flow_dv_dest_array_create_cb,\n-\t\t\t flow_dv_dest_array_match_cb,\n-\t\t\t flow_dv_dest_array_remove_cb,\n-\t\t\t flow_dv_dest_array_clone_cb,\n-\t\t\t flow_dv_dest_array_clone_free_cb);\n+\tsh->dest_array_list = mlx5_list_create(s, sh,\n+\t\t\t\t\t       flow_dv_dest_array_create_cb,\n+\t\t\t\t\t       flow_dv_dest_array_match_cb,\n+\t\t\t\t\t       flow_dv_dest_array_remove_cb,\n+\t\t\t\t\t       flow_dv_dest_array_clone_cb,\n+\t\t\t\t\t      flow_dv_dest_array_clone_free_cb);\n+\tif (!sh->dest_array_list)\n+\t\tgoto error;\n \t/* Create tags hash list table. */\n \tsnprintf(s, sizeof(s), \"%s_tags\", sh->ibdev_name);\n \tsh->tag_table = mlx5_hlist_create(s, MLX5_TAGS_HLIST_ARRAY_SIZE, 0,\n@@ -447,6 +455,22 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)\n \t\tsh->tunnel_hub = NULL;\n \t}\n \tmlx5_free_table_hash_list(priv);\n+\tif (sh->port_id_action_list) {\n+\t\tmlx5_list_destroy(sh->port_id_action_list);\n+\t\tsh->port_id_action_list = NULL;\n+\t}\n+\tif (sh->push_vlan_action_list) {\n+\t\tmlx5_list_destroy(sh->push_vlan_action_list);\n+\t\tsh->push_vlan_action_list = NULL;\n+\t}\n+\tif (sh->sample_action_list) {\n+\t\tmlx5_list_destroy(sh->sample_action_list);\n+\t\tsh->sample_action_list = NULL;\n+\t}\n+\tif (sh->dest_array_list) {\n+\t\tmlx5_list_destroy(sh->dest_array_list);\n+\t\tsh->dest_array_list = NULL;\n+\t}\n \treturn err;\n }\n \n@@ -508,9 +532,23 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)\n \t\tmlx5_release_tunnel_hub(sh, priv->dev_port);\n \t\tsh->tunnel_hub = NULL;\n \t}\n-\tmlx5_list_destroy(&sh->port_id_action_list);\n-\tmlx5_list_destroy(&sh->push_vlan_action_list);\n \tmlx5_free_table_hash_list(priv);\n+\tif (sh->port_id_action_list) {\n+\t\tmlx5_list_destroy(sh->port_id_action_list);\n+\t\tsh->port_id_action_list = NULL;\n+\t}\n+\tif (sh->push_vlan_action_list) {\n+\t\tmlx5_list_destroy(sh->push_vlan_action_list);\n+\t\tsh->push_vlan_action_list = NULL;\n+\t}\n+\tif (sh->sample_action_list) {\n+\t\tmlx5_list_destroy(sh->sample_action_list);\n+\t\tsh->sample_action_list = NULL;\n+\t}\n+\tif (sh->dest_array_list) {\n+\t\tmlx5_list_destroy(sh->dest_array_list);\n+\t\tsh->dest_array_list = NULL;\n+\t}\n }\n \n /**\n@@ -1710,11 +1748,13 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,\n \t\t\terr = ENOTSUP;\n \t\t\tgoto error;\n \t}\n-\tmlx5_list_create(&priv->hrxqs, \"hrxq\", eth_dev, mlx5_hrxq_create_cb,\n-\t\t\t mlx5_hrxq_match_cb,\n-\t\t\t mlx5_hrxq_remove_cb,\n-\t\t\t mlx5_hrxq_clone_cb,\n-\t\t\t mlx5_hrxq_clone_free_cb);\n+\tpriv->hrxqs = mlx5_list_create(\"hrxq\", eth_dev, mlx5_hrxq_create_cb,\n+\t\t\t\t       mlx5_hrxq_match_cb,\n+\t\t\t\t       mlx5_hrxq_remove_cb,\n+\t\t\t\t       mlx5_hrxq_clone_cb,\n+\t\t\t\t       mlx5_hrxq_clone_free_cb);\n+\tif (!priv->hrxqs)\n+\t\tgoto error;\n \trte_rwlock_init(&priv->ind_tbls_lock);\n \t/* Query availability of metadata reg_c's. */\n \terr = mlx5_flow_discover_mreg_c(eth_dev);\n@@ -1771,7 +1811,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,\n \t\t\tmlx5_drop_action_destroy(eth_dev);\n \t\tif (own_domain_id)\n \t\t\tclaim_zero(rte_eth_switch_domain_free(priv->domain_id));\n-\t\tmlx5_list_destroy(&priv->hrxqs);\n+\t\tif (priv->hrxqs)\n+\t\t\tmlx5_list_destroy(priv->hrxqs);\n \t\tmlx5_free(priv);\n \t\tif (eth_dev != NULL)\n \t\t\teth_dev->data->dev_private = NULL;\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex 9aade013c5..775ea15adb 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -1611,7 +1611,8 @@ mlx5_dev_close(struct rte_eth_dev *dev)\n \tif (ret)\n \t\tDRV_LOG(WARNING, \"port %u some flows still remain\",\n \t\t\tdev->data->port_id);\n-\tmlx5_list_destroy(&priv->hrxqs);\n+\tif (priv->hrxqs)\n+\t\tmlx5_list_destroy(priv->hrxqs);\n \t/*\n \t * Free the shared context in last turn, because the cleanup\n \t * routines above may use some shared fields, like\ndiff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex b01ce5cbfd..9319604d91 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -1114,10 +1114,10 @@ struct mlx5_dev_ctx_shared {\n \tstruct mlx5_hlist *encaps_decaps; /* Encap/decap action hash list. */\n \tstruct mlx5_hlist *modify_cmds;\n \tstruct mlx5_hlist *tag_table;\n-\tstruct mlx5_list port_id_action_list; /* Port ID action list. */\n-\tstruct mlx5_list push_vlan_action_list; /* Push VLAN actions. */\n-\tstruct mlx5_list sample_action_list; /* List of sample actions. */\n-\tstruct mlx5_list dest_array_list;\n+\tstruct mlx5_list *port_id_action_list; /* Port ID action list. */\n+\tstruct mlx5_list *push_vlan_action_list; /* Push VLAN actions. */\n+\tstruct mlx5_list *sample_action_list; /* List of sample actions. */\n+\tstruct mlx5_list *dest_array_list;\n \t/* List of destination array actions. */\n \tstruct mlx5_flow_counter_mng cmng; /* Counters management structure. */\n \tvoid *default_miss_action; /* Default miss action. */\n@@ -1359,7 +1359,7 @@ struct mlx5_priv {\n \tstruct mlx5_obj_ops obj_ops; /* HW objects operations. */\n \tLIST_HEAD(rxq, mlx5_rxq_ctrl) rxqsctrl; /* DPDK Rx queues. */\n \tLIST_HEAD(rxqobj, mlx5_rxq_obj) rxqsobj; /* Verbs/DevX Rx queues. */\n-\tstruct mlx5_list hrxqs; /* Hash Rx queues. */\n+\tstruct mlx5_list *hrxqs; /* Hash Rx queues. */\n \tLIST_HEAD(txq, mlx5_txq_ctrl) txqsctrl; /* DPDK Tx queues. */\n \tLIST_HEAD(txqobj, mlx5_txq_obj) txqsobj; /* Verbs/DevX Tx queues. */\n \t/* Indirection tables. */\ndiff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex ce363355c1..ce4d205e86 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -590,7 +590,7 @@ struct mlx5_flow_tbl_data_entry {\n \t/**< hash list entry, 64-bits key inside. */\n \tstruct mlx5_flow_tbl_resource tbl;\n \t/**< flow table resource. */\n-\tstruct mlx5_list matchers;\n+\tstruct mlx5_list *matchers;\n \t/**< matchers' header associated with the flow table. */\n \tstruct mlx5_flow_dv_jump_tbl_resource jump;\n \t/**< jump resource, at most one for each table created. */\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex 4a86d153f0..4aafe87524 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -3883,7 +3883,7 @@ flow_dv_port_id_action_resource_register\n \t\t.data = ref,\n \t};\n \n-\tentry = mlx5_list_register(&priv->sh->port_id_action_list, &ctx);\n+\tentry = mlx5_list_register(priv->sh->port_id_action_list, &ctx);\n \tif (!entry)\n \t\treturn -rte_errno;\n \tresource = container_of(entry, typeof(*resource), entry);\n@@ -4008,7 +4008,7 @@ flow_dv_push_vlan_action_resource_register\n \t\t.data = ref,\n \t};\n \n-\tentry = mlx5_list_register(&priv->sh->push_vlan_action_list, &ctx);\n+\tentry = mlx5_list_register(priv->sh->push_vlan_action_list, &ctx);\n \tif (!entry)\n \t\treturn -rte_errno;\n \tresource = container_of(entry, typeof(*resource), entry);\n@@ -10010,12 +10010,22 @@ flow_dv_tbl_create_cb(struct mlx5_hlist *list, uint64_t key64, void *cb_ctx)\n \tMKSTR(matcher_name, \"%s_%s_%u_%u_matcher_list\",\n \t      key.is_fdb ? \"FDB\" : \"NIC\", key.is_egress ? \"egress\" : \"ingress\",\n \t      key.level, key.id);\n-\tmlx5_list_create(&tbl_data->matchers, matcher_name, sh,\n-\t\t\t flow_dv_matcher_create_cb,\n-\t\t\t flow_dv_matcher_match_cb,\n-\t\t\t flow_dv_matcher_remove_cb,\n-\t\t\t flow_dv_matcher_clone_cb,\n-\t\t\t flow_dv_matcher_clone_free_cb);\n+\ttbl_data->matchers = mlx5_list_create(matcher_name, sh,\n+\t\t\t\t\t      flow_dv_matcher_create_cb,\n+\t\t\t\t\t      flow_dv_matcher_match_cb,\n+\t\t\t\t\t      flow_dv_matcher_remove_cb,\n+\t\t\t\t\t      flow_dv_matcher_clone_cb,\n+\t\t\t\t\t      flow_dv_matcher_clone_free_cb);\n+\tif (!tbl_data->matchers) {\n+\t\trte_flow_error_set(error, ENOMEM,\n+\t\t\t\t   RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n+\t\t\t\t   NULL,\n+\t\t\t\t   \"cannot create tbl matcher list\");\n+\t\tmlx5_flow_os_destroy_flow_action(tbl_data->jump.action);\n+\t\tmlx5_flow_os_destroy_flow_tbl(tbl->obj);\n+\t\tmlx5_ipool_free(sh->ipool[MLX5_IPOOL_JUMP], idx);\n+\t\treturn NULL;\n+\t}\n \treturn &tbl_data->entry;\n }\n \n@@ -10143,7 +10153,7 @@ flow_dv_tbl_remove_cb(struct mlx5_hlist *list,\n \t\t\ttbl_data->tunnel->tunnel_id : 0,\n \t\t\ttbl_data->group_id);\n \t}\n-\tmlx5_list_destroy(&tbl_data->matchers);\n+\tmlx5_list_destroy(tbl_data->matchers);\n \tmlx5_ipool_free(sh->ipool[MLX5_IPOOL_JUMP], tbl_data->idx);\n }\n \n@@ -10275,7 +10285,7 @@ flow_dv_matcher_register(struct rte_eth_dev *dev,\n \t\treturn -rte_errno;\t/* No need to refill the error info */\n \ttbl_data = container_of(tbl, struct mlx5_flow_tbl_data_entry, tbl);\n \tref->tbl = tbl;\n-\tentry = mlx5_list_register(&tbl_data->matchers, &ctx);\n+\tentry = mlx5_list_register(tbl_data->matchers, &ctx);\n \tif (!entry) {\n \t\tflow_dv_tbl_resource_release(MLX5_SH(dev), tbl);\n \t\treturn rte_flow_error_set(error, ENOMEM,\n@@ -10872,7 +10882,7 @@ flow_dv_sample_resource_register(struct rte_eth_dev *dev,\n \t\t.data = ref,\n \t};\n \n-\tentry = mlx5_list_register(&priv->sh->sample_action_list, &ctx);\n+\tentry = mlx5_list_register(priv->sh->sample_action_list, &ctx);\n \tif (!entry)\n \t\treturn -rte_errno;\n \tresource = container_of(entry, typeof(*resource), entry);\n@@ -11087,7 +11097,7 @@ flow_dv_dest_array_resource_register(struct rte_eth_dev *dev,\n \t\t.data = ref,\n \t};\n \n-\tentry = mlx5_list_register(&priv->sh->dest_array_list, &ctx);\n+\tentry = mlx5_list_register(priv->sh->dest_array_list, &ctx);\n \tif (!entry)\n \t\treturn -rte_errno;\n \tresource = container_of(entry, typeof(*resource), entry);\n@@ -13553,7 +13563,7 @@ flow_dv_matcher_release(struct rte_eth_dev *dev,\n \tint ret;\n \n \tMLX5_ASSERT(matcher->matcher_object);\n-\tret = mlx5_list_unregister(&tbl->matchers, &matcher->entry);\n+\tret = mlx5_list_unregister(tbl->matchers, &matcher->entry);\n \tflow_dv_tbl_resource_release(MLX5_SH(dev), &tbl->tbl);\n \treturn ret;\n }\n@@ -13696,7 +13706,7 @@ flow_dv_port_id_action_resource_release(struct rte_eth_dev *dev,\n \tif (!resource)\n \t\treturn 0;\n \tMLX5_ASSERT(resource->action);\n-\treturn mlx5_list_unregister(&priv->sh->port_id_action_list,\n+\treturn mlx5_list_unregister(priv->sh->port_id_action_list,\n \t\t\t\t    &resource->entry);\n }\n \n@@ -13754,7 +13764,7 @@ flow_dv_push_vlan_action_resource_release(struct rte_eth_dev *dev,\n \tif (!resource)\n \t\treturn 0;\n \tMLX5_ASSERT(resource->action);\n-\treturn mlx5_list_unregister(&priv->sh->push_vlan_action_list,\n+\treturn mlx5_list_unregister(priv->sh->push_vlan_action_list,\n \t\t\t\t    &resource->entry);\n }\n \n@@ -13835,7 +13845,7 @@ flow_dv_sample_resource_release(struct rte_eth_dev *dev,\n \tif (!resource)\n \t\treturn 0;\n \tMLX5_ASSERT(resource->verbs_action);\n-\treturn mlx5_list_unregister(&priv->sh->sample_action_list,\n+\treturn mlx5_list_unregister(priv->sh->sample_action_list,\n \t\t\t\t    &resource->entry);\n }\n \n@@ -13883,7 +13893,7 @@ flow_dv_dest_array_resource_release(struct rte_eth_dev *dev,\n \tif (!resource)\n \t\treturn 0;\n \tMLX5_ASSERT(resource->action);\n-\treturn mlx5_list_unregister(&priv->sh->dest_array_list,\n+\treturn mlx5_list_unregister(priv->sh->dest_array_list,\n \t\t\t\t    &resource->entry);\n }\n \n@@ -14727,7 +14737,7 @@ __flow_dv_destroy_sub_policy_rules(struct rte_eth_dev *dev,\n \t\tif (sub_policy->color_matcher[i]) {\n \t\t\ttbl = container_of(sub_policy->color_matcher[i]->tbl,\n \t\t\t\ttypeof(*tbl), tbl);\n-\t\t\tmlx5_list_unregister(&tbl->matchers,\n+\t\t\tmlx5_list_unregister(tbl->matchers,\n \t\t\t\t      &sub_policy->color_matcher[i]->entry);\n \t\t\tsub_policy->color_matcher[i] = NULL;\n \t\t}\n@@ -15461,7 +15471,7 @@ flow_dv_destroy_mtr_drop_tbls(struct rte_eth_dev *dev)\n \t\tif (mtrmng->def_matcher[i]) {\n \t\t\ttbl = container_of(mtrmng->def_matcher[i]->tbl,\n \t\t\t\tstruct mlx5_flow_tbl_data_entry, tbl);\n-\t\t\tmlx5_list_unregister(&tbl->matchers,\n+\t\t\tmlx5_list_unregister(tbl->matchers,\n \t\t\t\t\t     &mtrmng->def_matcher[i]->entry);\n \t\t\tmtrmng->def_matcher[i] = NULL;\n \t\t}\n@@ -15471,7 +15481,7 @@ flow_dv_destroy_mtr_drop_tbls(struct rte_eth_dev *dev)\n \t\t\t\tcontainer_of(mtrmng->drop_matcher[i][j]->tbl,\n \t\t\t\t\t     struct mlx5_flow_tbl_data_entry,\n \t\t\t\t\t     tbl);\n-\t\t\t\tmlx5_list_unregister(&tbl->matchers,\n+\t\t\t\tmlx5_list_unregister(tbl->matchers,\n \t\t\t\t\t    &mtrmng->drop_matcher[i][j]->entry);\n \t\t\t\tmtrmng->drop_matcher[i][j] = NULL;\n \t\t\t}\n@@ -15604,7 +15614,7 @@ __flow_dv_create_policy_matcher(struct rte_eth_dev *dev,\n \tmatcher.priority = priority;\n \tmatcher.crc = rte_raw_cksum((const void *)matcher.mask.buf,\n \t\t\t\t\tmatcher.mask.size);\n-\tentry = mlx5_list_register(&tbl_data->matchers, &ctx);\n+\tentry = mlx5_list_register(tbl_data->matchers, &ctx);\n \tif (!entry) {\n \t\tDRV_LOG(ERR, \"Failed to register meter drop matcher.\");\n \t\treturn -1;\n@@ -16013,7 +16023,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,\n \t\t\tmatcher.crc = rte_raw_cksum\n \t\t\t\t\t((const void *)matcher.mask.buf,\n \t\t\t\t\tmatcher.mask.size);\n-\t\t\tentry = mlx5_list_register(&tbl_data->matchers, &ctx);\n+\t\t\tentry = mlx5_list_register(tbl_data->matchers, &ctx);\n \t\t\tif (!entry) {\n \t\t\t\tDRV_LOG(ERR, \"Failed to register meter \"\n \t\t\t\t\"drop default matcher.\");\n@@ -16050,7 +16060,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,\n \t\t\tmatcher.crc = rte_raw_cksum\n \t\t\t\t\t((const void *)matcher.mask.buf,\n \t\t\t\t\tmatcher.mask.size);\n-\t\t\tentry = mlx5_list_register(&tbl_data->matchers, &ctx);\n+\t\t\tentry = mlx5_list_register(tbl_data->matchers, &ctx);\n \t\t\tif (!entry) {\n \t\t\t\tDRV_LOG(ERR,\n \t\t\t\t\"Failed to register meter drop matcher.\");\ndiff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c\nindex f8769da8dc..aa9e973d10 100644\n--- a/drivers/net/mlx5/mlx5_rxq.c\n+++ b/drivers/net/mlx5/mlx5_rxq.c\n@@ -2385,7 +2385,7 @@ uint32_t mlx5_hrxq_get(struct rte_eth_dev *dev,\n \tif (rss_desc->shared_rss) {\n \t\thrxq = __mlx5_hrxq_create(dev, rss_desc);\n \t} else {\n-\t\tentry = mlx5_list_register(&priv->hrxqs, &ctx);\n+\t\tentry = mlx5_list_register(priv->hrxqs, &ctx);\n \t\tif (!entry)\n \t\t\treturn 0;\n \t\thrxq = container_of(entry, typeof(*hrxq), entry);\n@@ -2415,7 +2415,7 @@ int mlx5_hrxq_release(struct rte_eth_dev *dev, uint32_t hrxq_idx)\n \tif (!hrxq)\n \t\treturn 0;\n \tif (!hrxq->standalone)\n-\t\treturn mlx5_list_unregister(&priv->hrxqs, &hrxq->entry);\n+\t\treturn mlx5_list_unregister(priv->hrxqs, &hrxq->entry);\n \t__mlx5_hrxq_remove(dev, hrxq);\n \treturn 0;\n }\n@@ -2503,7 +2503,7 @@ mlx5_hrxq_verify(struct rte_eth_dev *dev)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \n-\treturn mlx5_list_get_entry_num(&priv->hrxqs);\n+\treturn mlx5_list_get_entry_num(priv->hrxqs);\n }\n \n /**\ndiff --git a/drivers/net/mlx5/mlx5_utils.c b/drivers/net/mlx5/mlx5_utils.c\nindex 29248c80ed..a4526444f9 100644\n--- a/drivers/net/mlx5/mlx5_utils.c\n+++ b/drivers/net/mlx5/mlx5_utils.c\n@@ -11,20 +11,25 @@\n \n /********************* mlx5 list ************************/\n \n-int\n-mlx5_list_create(struct mlx5_list *list, const char *name, void *ctx,\n+struct mlx5_list *\n+mlx5_list_create(const char *name, void *ctx,\n \t\t mlx5_list_create_cb cb_create,\n \t\t mlx5_list_match_cb cb_match,\n \t\t mlx5_list_remove_cb cb_remove,\n \t\t mlx5_list_clone_cb cb_clone,\n \t\t mlx5_list_clone_free_cb cb_clone_free)\n {\n+\tstruct mlx5_list *list;\n \tint i;\n \n-\tMLX5_ASSERT(list);\n \tif (!cb_match || !cb_create || !cb_remove || !cb_clone ||\n-\t    !cb_clone_free)\n-\t\treturn -1;\n+\t    !cb_clone_free) {\n+\t\trte_errno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\tlist = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*list), 0, SOCKET_ID_ANY);\n+\tif (!list)\n+\t\treturn NULL;\n \tif (name)\n \t\tsnprintf(list->name, sizeof(list->name), \"%s\", name);\n \tlist->ctx = ctx;\n@@ -37,7 +42,7 @@ mlx5_list_create(struct mlx5_list *list, const char *name, void *ctx,\n \tDRV_LOG(DEBUG, \"mlx5 list %s initialized.\", list->name);\n \tfor (i = 0; i <= RTE_MAX_LCORE; i++)\n \t\tLIST_INIT(&list->cache[i].h);\n-\treturn 0;\n+\treturn list;\n }\n \n static struct mlx5_list_entry *\n@@ -244,7 +249,7 @@ mlx5_list_destroy(struct mlx5_list *list)\n \t\t\t}\n \t\t}\n \t}\n-\tmemset(list, 0, sizeof(*list));\n+\tmlx5_free(list);\n }\n \n uint32_t\ndiff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h\nindex ffa9cd5142..0bf2f5f5ca 100644\n--- a/drivers/net/mlx5/mlx5_utils.h\n+++ b/drivers/net/mlx5/mlx5_utils.h\n@@ -419,15 +419,14 @@ struct mlx5_list {\n  * @param cb_remove\n  *   Callback function for entry remove.\n  * @return\n- *   0 on success, otherwise failure.\n+ *   List pointer on success, otherwise NULL.\n  */\n-int mlx5_list_create(struct mlx5_list *list,\n-\t\t\t const char *name, void *ctx,\n-\t\t\t mlx5_list_create_cb cb_create,\n-\t\t\t mlx5_list_match_cb cb_match,\n-\t\t\t mlx5_list_remove_cb cb_remove,\n-\t\t\t mlx5_list_clone_cb cb_clone,\n-\t\t\t mlx5_list_clone_free_cb cb_clone_free);\n+struct mlx5_list *mlx5_list_create(const char *name, void *ctx,\n+\t\t\t\t   mlx5_list_create_cb cb_create,\n+\t\t\t\t   mlx5_list_match_cb cb_match,\n+\t\t\t\t   mlx5_list_remove_cb cb_remove,\n+\t\t\t\t   mlx5_list_clone_cb cb_clone,\n+\t\t\t\t   mlx5_list_clone_free_cb cb_clone_free);\n \n /**\n  * Search an entry matching the key.\ndiff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c\nindex f6cf1928b2..97a8f04e39 100644\n--- a/drivers/net/mlx5/windows/mlx5_os.c\n+++ b/drivers/net/mlx5/windows/mlx5_os.c\n@@ -608,7 +608,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,\n \t\t\terr = ENOTSUP;\n \t\t\tgoto error;\n \t}\n-\tmlx5_list_create(&priv->hrxqs, \"hrxq\", eth_dev,\n+\tpriv->hrxqs = mlx5_list_create(\"hrxq\", eth_dev,\n \t\tmlx5_hrxq_create_cb, mlx5_hrxq_match_cb,\n \t\tmlx5_hrxq_remove_cb, mlx5_hrxq_clone_cb,\n \t\tmlx5_hrxq_clone_free_cb);\n",
    "prefixes": [
        "v2",
        "11/22"
    ]
}