get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 97006,
    "url": "http://patchwork.dpdk.org/api/patches/97006/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210817134441.1966618-16-michaelba@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": "<20210817134441.1966618-16-michaelba@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210817134441.1966618-16-michaelba@nvidia.com",
    "date": "2021-08-17T13:44:35",
    "name": "[RFC,15/21] mlx5: share context device structure between drivers",
    "commit_ref": null,
    "pull_url": null,
    "state": "rfc",
    "archived": true,
    "hash": "5597b43b811dfe3339bfefb6fca0c191de2762ea",
    "submitter": {
        "id": 1949,
        "url": "http://patchwork.dpdk.org/api/people/1949/?format=api",
        "name": "Michael Baum",
        "email": "michaelba@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/20210817134441.1966618-16-michaelba@nvidia.com/mbox/",
    "series": [
        {
            "id": 18314,
            "url": "http://patchwork.dpdk.org/api/series/18314/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=18314",
            "date": "2021-08-17T13:44:20",
            "name": "mlx5: sharing global MR cache between drivers",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/18314/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/97006/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/97006/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 D6C2AA0548;\n\tTue, 17 Aug 2021 15:47:30 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A5FD441220;\n\tTue, 17 Aug 2021 15:45:44 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n (mail-sn1anam02on2055.outbound.protection.outlook.com [40.107.96.55])\n by mails.dpdk.org (Postfix) with ESMTP id 0B2194123F\n for <dev@dpdk.org>; Tue, 17 Aug 2021 15:45:43 +0200 (CEST)",
            "from BN6PR13CA0023.namprd13.prod.outlook.com (2603:10b6:404:10a::33)\n by BN9PR12MB5211.namprd12.prod.outlook.com (2603:10b6:408:11c::24)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4415.17; Tue, 17 Aug\n 2021 13:45:41 +0000",
            "from BN8NAM11FT065.eop-nam11.prod.protection.outlook.com\n (2603:10b6:404:10a:cafe::32) by BN6PR13CA0023.outlook.office365.com\n (2603:10b6:404:10a::33) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.8 via Frontend\n Transport; Tue, 17 Aug 2021 13:45:41 +0000",
            "from mail.nvidia.com (216.228.112.35) by\n BN8NAM11FT065.mail.protection.outlook.com (10.13.177.63) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4415.14 via Frontend Transport; Tue, 17 Aug 2021 13:45:40 +0000",
            "from DRHQMAIL107.nvidia.com (10.27.9.16) by HQMAIL111.nvidia.com\n (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 17 Aug\n 2021 13:45:39 +0000",
            "from nvidia.com (172.20.187.6) by DRHQMAIL107.nvidia.com\n (10.27.9.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 17 Aug\n 2021 13:45:37 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=bBh66MppsPRyncd8m2R3bB73raRK7NL1m7RkAE/h+O71GgI1vmTWYJccwB029twnC0c6M/1jALSfYsUktVnClAfw+1g8UpFZkV/Iew1hj2pZTTKAU/xOyF3NzAyRnB2zCab0y3P0xTbYcDJhQiGv4tFo6fQsfaPLdhRFI/aFxqW1XTxlhidNaQ2abVy1fXtgua5d+BqNlmhBD2GsZKACsiFVtrpgtO52P1zRRD1efQJSCCU47dpV22YWV61HQq4XRFelFXf0qIyWEntELtm8I7Ff2knBcNNe2GPOxmK3DJBVHXQwrgzo3CIRbyvfKIDAA+wKYge1INcynqd8ZpajWA==",
        "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=/29qP/xMolmUxuiUQn90BxKebbd5RlbqJhraKg+Sj/M=;\n b=kOHnmGCQYBZ3VIqW0pLWT9FtjfpM8mym7XcIr8OfQomsZJs8x7xVUto9dNzLrLymwdXCrexS0YWKyOfJ/iFM3MCrR0HwTsoyCVrPkAUt2C/0POPnOhl3KmmmeWSaVSKpCbdEMVGeQO6BAFn5kGMrKB1XFMiHrIOSW8XOWF/uPi7DlYyYJM0S+DEnEzGVZ2xqJZRKW2B1VthBlKGv86P8d9mM9rm8rJEf+Az522iVNzl6zBG9GcKVjwgRAcIzHQ4z0SfQBdI43TWmEBgLcEAPOSSxOFGTPqQs+4WhmouOqi2Xs3jh06JmFwQ1tkIM7yWroFt5RJcl+LF7TO4XTG847A==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.35) smtp.rcpttodomain=dpdk.org 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=/29qP/xMolmUxuiUQn90BxKebbd5RlbqJhraKg+Sj/M=;\n b=C4/KMwoRP3sPaMR+1zopMfM1WCZ9uWFFFm1Dy649+/g4R3xVpdPb/xwbK4t0t8n3LFbQ6j5tUhXB6AWe1NAFeRH9y1wtUELxE5lpdMi2ghN5mRD6aPHGpieTRIZsjgy+QIJh6/OramhzaJnBY7DYaxM0G1w01hBsALKo7SFWVy+xKxOMZa8Guxq9V6qTxBIsvlVrNn7dJfabdQolbr8OSXKo/umF4qFaGGN+TnjvqwhtFVd06xZrKSvmYca237BIyqkwq+mwZyjmUgzI87s7UYG78CbKoft8oHPimMkVEuaXwwyZ5kQ/d/5D0l1OVAe1Jw5OFwyRfy9KWmZcv1mw/w==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.35)\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.35 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.35; helo=mail.nvidia.com;",
        "From": "Michael Baum <michaelba@nvidia.com>",
        "To": "<dev@dpdk.org>",
        "CC": "Matan Azrad <matan@nvidia.com>, Raslan Darawsheh <rasland@nvidia.com>,\n Viacheslav Ovsiienko <viacheslavo@nvidia.com>",
        "Date": "Tue, 17 Aug 2021 16:44:35 +0300",
        "Message-ID": "<20210817134441.1966618-16-michaelba@nvidia.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210817134441.1966618-1-michaelba@nvidia.com>",
        "References": "<20210817134441.1966618-1-michaelba@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[172.20.187.6]",
        "X-ClientProxiedBy": "HQMAIL111.nvidia.com (172.20.187.18) To\n DRHQMAIL107.nvidia.com (10.27.9.16)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "45ff0919-9fec-4adc-cd5a-08d961854d5a",
        "X-MS-TrafficTypeDiagnostic": "BN9PR12MB5211:",
        "X-Microsoft-Antispam-PRVS": "\n <BN9PR12MB52118AE3AD6B974894CFBB51CCFE9@BN9PR12MB5211.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:142;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n moKG4Q6r1T0OiEBxGLOB7H2D2gaF1vXM4NxHKDqVygyfZQOlqVBmnL3GPByYuvFSj8uV2+d/zFgkW+ePpG5evSEBhFBecWyjfil2CnLNiEgvH5HZw054zFzGmM3UcSjcS8qSae0fTuI/71sFTF5TFKamrThF3VEvd+uhkeDVnCqxwkid6yY9nDBwCP6q17dkNPOgz8zVohTXe3+KgH9X2s6BsvbqmgiIU08tHig7ZSFOwKu7g9N14epKgcSJbBifWFEW9aHM9bNcDMk7/9E4jV9X0LBYk8f64E8BFOEakvRoPGITyJSIg4n059cNAOlSLAiBkBsMytGkvX97ABnRSBtuuI+4R5tNCi49FcPfzI0UOM8BFm83eR+aspa7ZH3mWqKaJ0MaUsqku1ssgGfnUC7eiuKGxc3kbdf7jqz/HZStW5BN5LX4dOppiKj7y5Md41VAW2iiKj6rwDiPMdUTZgzZ2f1YVi3qdW7qo+0/3EdwJWFH1fjCfKz6avdvsEvLPdBZEQ7nIRKVq21pznYbYROVTwMJDu6ehwC/tJEFBsGODWKwQNAyRAyHP0U/b5JXsqeiA+Iso1dDAmbhjjhfq9lngKpDlMrv+v92OEJaJ54BMgSvi0uZWYZKUKKxNFgkbiimHBp0mP/szB7dHaSLqnBa4RH4Y4Ik4rTf4yK4TvLKr8MQKYPZRZmE1fuV3McA4ArmJSLqbUlgFGWGJjzCQQ==",
        "X-Forefront-Antispam-Report": "CIP:216.228.112.35; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid04.nvidia.com; CAT:NONE;\n SFS:(4636009)(46966006)(36840700001)(2906002)(336012)(83380400001)(6286002)(4326008)(5660300002)(426003)(508600001)(82310400003)(7636003)(55016002)(356005)(8936002)(7696005)(6916009)(70586007)(2616005)(30864003)(70206006)(36756003)(36860700001)(1076003)(47076005)(107886003)(16526019)(186003)(26005)(86362001)(8676002)(316002)(54906003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "17 Aug 2021 13:45:40.3848 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 45ff0919-9fec-4adc-cd5a-08d961854d5a",
        "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.35];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BN8NAM11FT065.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN9PR12MB5211",
        "Subject": "[dpdk-dev] [RFC 15/21] mlx5: share context device structure between\n drivers",
        "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": "Create and initialize context device structure ones in common probing,\nand give a pointer to it for each driver.\n\nSigned-off-by: Michael Baum <michaelba@nvidia.com>\n---\n drivers/common/mlx5/mlx5_common.c     | 40 +++++++++++++++++++++------\n drivers/common/mlx5/mlx5_common.h     | 30 +-------------------\n drivers/common/mlx5/version.map       |  2 --\n drivers/compress/mlx5/mlx5_compress.c | 31 ++-------------------\n drivers/crypto/mlx5/mlx5_crypto.c     | 34 ++---------------------\n drivers/net/mlx5/linux/mlx5_os.c      | 36 ++++++++----------------\n drivers/net/mlx5/mlx5.c               | 32 ---------------------\n drivers/net/mlx5/windows/mlx5_os.c    | 22 ++-------------\n drivers/regex/mlx5/mlx5_regex.c       | 35 ++++-------------------\n drivers/vdpa/mlx5/mlx5_vdpa.c         | 35 ++++-------------------\n 10 files changed, 64 insertions(+), 233 deletions(-)",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c\nindex 0870ee0718..b500e7834e 100644\n--- a/drivers/common/mlx5/mlx5_common.c\n+++ b/drivers/common/mlx5/mlx5_common.c\n@@ -319,7 +319,7 @@ mlx5_dev_to_pci_str(const struct rte_device *dev, char *addr, size_t size)\n  * @return\n  *   0 on success, a negative errno value otherwise and rte_errno is set.\n  */\n-void\n+static void\n mlx5_dev_ctx_release(struct mlx5_dev_ctx *dev_ctx)\n {\n \tif (dev_ctx->pd != NULL) {\n@@ -345,7 +345,7 @@ mlx5_dev_ctx_release(struct mlx5_dev_ctx *dev_ctx)\n  * @return\n  *   0 on success, a negative errno value otherwise and rte_errno is set.\n  */\n-int\n+static int\n mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,\n \t\t     uint32_t classes_loaded)\n {\n@@ -386,12 +386,36 @@ mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,\n }\n \n static void\n-dev_release(struct mlx5_common_device *dev)\n+mlx5_common_dev_release(struct mlx5_common_device *dev)\n {\n \tTAILQ_REMOVE(&devices_list, dev, next);\n+\tmlx5_dev_ctx_release(&dev->ctx);\n \trte_free(dev);\n }\n \n+static struct mlx5_common_device *\n+mlx5_common_dev_create(struct rte_device *eal_dev, uint32_t classes)\n+{\n+\tstruct mlx5_common_device *dev;\n+\tint ret;\n+\n+\tdev = rte_zmalloc(\"mlx5_common_device\", sizeof(*dev), 0);\n+\tif (!dev) {\n+\t\tDRV_LOG(ERR, \"Device allocation failure.\");\n+\t\trte_errno = ENOMEM;\n+\t\treturn NULL;\n+\t}\n+\tret = mlx5_dev_ctx_prepare(&dev->ctx, eal_dev, classes);\n+\tif (ret) {\n+\t\tDRV_LOG(ERR, \"Failed to create device context.\");\n+\t\trte_free(dev);\n+\t\treturn NULL;\n+\t}\n+\tdev->dev = eal_dev;\n+\tTAILQ_INSERT_HEAD(&devices_list, dev, next);\n+\treturn dev;\n+}\n+\n static int\n drivers_remove(struct mlx5_common_device *dev, uint32_t enabled_classes)\n {\n@@ -477,11 +501,9 @@ mlx5_common_dev_probe(struct rte_device *eal_dev)\n \t\tclasses = MLX5_CLASS_ETH;\n \tdev = to_mlx5_device(eal_dev);\n \tif (!dev) {\n-\t\tdev = rte_zmalloc(\"mlx5_common_device\", sizeof(*dev), 0);\n+\t\tdev = mlx5_common_dev_create(eal_dev, classes);\n \t\tif (!dev)\n-\t\t\treturn -ENOMEM;\n-\t\tdev->dev = eal_dev;\n-\t\tTAILQ_INSERT_HEAD(&devices_list, dev, next);\n+\t\t\treturn -rte_errno;\n \t\tnew_device = true;\n \t} else {\n \t\t/* Validate combination here. */\n@@ -498,7 +520,7 @@ mlx5_common_dev_probe(struct rte_device *eal_dev)\n \treturn 0;\n class_err:\n \tif (new_device)\n-\t\tdev_release(dev);\n+\t\tmlx5_common_dev_release(dev);\n \treturn ret;\n }\n \n@@ -514,7 +536,7 @@ mlx5_common_dev_remove(struct rte_device *eal_dev)\n \t/* Matching device found, cleanup and unload drivers. */\n \tret = drivers_remove(dev, dev->classes_loaded);\n \tif (ret != 0)\n-\t\tdev_release(dev);\n+\t\tmlx5_common_dev_release(dev);\n \treturn ret;\n }\n \ndiff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h\nindex c5f2a6285f..644dc58bc9 100644\n--- a/drivers/common/mlx5/mlx5_common.h\n+++ b/drivers/common/mlx5/mlx5_common.h\n@@ -339,37 +339,9 @@ struct mlx5_common_device {\n \tstruct rte_device *dev;\n \tTAILQ_ENTRY(mlx5_common_device) next;\n \tuint32_t classes_loaded;\n+\tstruct mlx5_dev_ctx ctx;\n };\n \n-/**\n- * Uninitialize context device and release all its resources.\n- *\n- * @param dev_ctx\n- *   Pointer to the context device data structure.\n- *\n- * @return\n- *   0 on success, a negative errno value otherwise and rte_errno is set.\n- */\n-__rte_internal\n-void mlx5_dev_ctx_release(struct mlx5_dev_ctx *dev_ctx);\n-\n-/**\n- * Initialize context device and allocate all its resources.\n- *\n- * @param dev_ctx\n- *   Pointer to the context device data structure.\n- * @param dev\n- *   Pointer to mlx5 device structure.\n- * @param classes_loaded\n- *   Chosen classes come from device arguments.\n- *\n- * @return\n- *   0 on success, a negative errno value otherwise and rte_errno is set.\n- */\n-__rte_internal\n-int mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,\n-\t\t\t uint32_t classes_loaded);\n-\n /**\n  * Initialization function for the driver called during device probing.\n  */\ndiff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map\nindex a1a8bae5bd..4b24833ecb 100644\n--- a/drivers/common/mlx5/version.map\n+++ b/drivers/common/mlx5/version.map\n@@ -10,8 +10,6 @@ INTERNAL {\n \tmlx5_common_init;\n \n \tmlx5_parse_db_map_arg; # WINDOWS_NO_EXPORT\n-\tmlx5_dev_ctx_release;\n-\tmlx5_dev_ctx_prepare;\n \n \tmlx5_common_verbs_reg_mr; # WINDOWS_NO_EXPORT\n \tmlx5_common_verbs_dereg_mr; # WINDOWS_NO_EXPORT\ndiff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c\nindex 8348ea8ea3..93b0cc8ea6 100644\n--- a/drivers/compress/mlx5/mlx5_compress.c\n+++ b/drivers/compress/mlx5/mlx5_compress.c\n@@ -751,43 +751,25 @@ static int\n mlx5_compress_dev_probe(struct mlx5_common_device *dev)\n {\n \tstruct rte_compressdev *cdev;\n-\tstruct mlx5_dev_ctx *dev_ctx;\n+\tstruct mlx5_dev_ctx *dev_ctx = &dev->ctx;\n \tstruct mlx5_compress_priv *priv;\n \tstruct mlx5_hca_attr att = { 0 };\n \tstruct rte_compressdev_pmd_init_params init_params = {\n \t\t.name = \"\",\n \t\t.socket_id = dev->dev->numa_node,\n \t};\n-\tconst char *ibdev_name;\n-\tint ret;\n+\tconst char *ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY) {\n \t\tDRV_LOG(ERR, \"Non-primary process type is not supported.\");\n \t\trte_errno = ENOTSUP;\n \t\treturn -rte_errno;\n \t}\n-\tdev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),\n-\t\t\t      RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n-\tif (dev_ctx == NULL) {\n-\t\tDRV_LOG(ERR, \"Device context allocation failure.\");\n-\t\trte_errno = ENOMEM;\n-\t\treturn -rte_errno;\n-\t}\n-\tret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_COMPRESS);\n-\tif (ret < 0) {\n-\t\tDRV_LOG(ERR, \"Failed to create device context.\");\n-\t\tmlx5_free(dev_ctx);\n-\t\trte_errno = ENODEV;\n-\t\treturn -rte_errno;\n-\t}\n-\tibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);\n \tif (mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &att) != 0 ||\n \t    att.mmo_compress_en == 0 || att.mmo_decompress_en == 0 ||\n \t    att.mmo_dma_en == 0) {\n \t\tDRV_LOG(ERR, \"Not enough capabilities to support compress \"\n \t\t\t\"operations, maybe old FW/OFED version?\");\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n \t\trte_errno = ENOTSUP;\n \t\treturn -ENOTSUP;\n \t}\n@@ -795,8 +777,6 @@ mlx5_compress_dev_probe(struct mlx5_common_device *dev)\n \t\t\t\t\t  sizeof(*priv), &init_params);\n \tif (cdev == NULL) {\n \t\tDRV_LOG(ERR, \"Failed to create device \\\"%s\\\".\", ibdev_name);\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n \t\treturn -ENODEV;\n \t}\n \tDRV_LOG(INFO,\n@@ -812,8 +792,6 @@ mlx5_compress_dev_probe(struct mlx5_common_device *dev)\n \tpriv->sq_ts_format = att.sq_ts_format;\n \tif (mlx5_compress_hw_global_prepare(priv) != 0) {\n \t\trte_compressdev_pmd_destroy(priv->cdev);\n-\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\tmlx5_free(priv->dev_ctx);\n \t\treturn -1;\n \t}\n \tif (mlx5_mr_btree_init(&priv->mr_scache.cache,\n@@ -821,8 +799,6 @@ mlx5_compress_dev_probe(struct mlx5_common_device *dev)\n \t\tDRV_LOG(ERR, \"Failed to allocate shared cache MR memory.\");\n \t\tmlx5_compress_hw_global_release(priv);\n \t\trte_compressdev_pmd_destroy(priv->cdev);\n-\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\tmlx5_free(priv->dev_ctx);\n \t\trte_errno = ENOMEM;\n \t\treturn -rte_errno;\n \t}\n@@ -858,8 +834,7 @@ mlx5_compress_dev_remove(struct mlx5_common_device *dev)\n \t\tmlx5_mr_release_cache(&priv->mr_scache);\n \t\tmlx5_compress_hw_global_release(priv);\n \t\trte_compressdev_pmd_destroy(priv->cdev);\n-\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\tmlx5_free(priv->dev_ctx);\n+\t\tpriv->dev_ctx = NULL;\n \t}\n \treturn 0;\n }\ndiff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c\nindex 44656225d2..4f390c8bf4 100644\n--- a/drivers/crypto/mlx5/mlx5_crypto.c\n+++ b/drivers/crypto/mlx5/mlx5_crypto.c\n@@ -945,7 +945,7 @@ static int\n mlx5_crypto_dev_probe(struct mlx5_common_device *dev)\n {\n \tstruct rte_cryptodev *crypto_dev;\n-\tstruct mlx5_dev_ctx *dev_ctx;\n+\tstruct mlx5_dev_ctx *dev_ctx = &dev->ctx;\n \tstruct mlx5_devx_obj *login;\n \tstruct mlx5_crypto_priv *priv;\n \tstruct mlx5_crypto_devarg_params devarg_prms = { 0 };\n@@ -957,7 +957,7 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)\n \t\t.max_nb_queue_pairs =\n \t\t\t\tRTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,\n \t};\n-\tconst char *ibdev_name;\n+\tconst char *ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);\n \tuint16_t rdmw_wqe_size;\n \tint ret;\n \n@@ -966,51 +966,28 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)\n \t\trte_errno = ENOTSUP;\n \t\treturn -rte_errno;\n \t}\n-\tdev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),\n-\t\t\t      RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n-\tif (dev_ctx == NULL) {\n-\t\tDRV_LOG(ERR, \"Device context allocation failure.\");\n-\t\trte_errno = ENOMEM;\n-\t\treturn -rte_errno;\n-\t}\n-\tret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_CRYPTO);\n-\tif (ret < 0) {\n-\t\tDRV_LOG(ERR, \"Failed to create device context.\");\n-\t\tmlx5_free(dev_ctx);\n-\t\trte_errno = ENODEV;\n-\t\treturn -rte_errno;\n-\t}\n-\tibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);\n \tif (mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &attr) != 0 ||\n \t    attr.crypto == 0 || attr.aes_xts == 0) {\n \t\tDRV_LOG(ERR, \"Not enough capabilities to support crypto \"\n \t\t\t\"operations, maybe old FW/OFED version?\");\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n \t\trte_errno = ENOTSUP;\n \t\treturn -ENOTSUP;\n \t}\n \tret = mlx5_crypto_parse_devargs(dev->dev->devargs, &devarg_prms);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Failed to parse devargs.\");\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n \t\treturn -rte_errno;\n \t}\n \tlogin = mlx5_devx_cmd_create_crypto_login_obj(dev_ctx->ctx,\n \t\t\t\t\t\t      &devarg_prms.login_attr);\n \tif (login == NULL) {\n \t\tDRV_LOG(ERR, \"Failed to configure login.\");\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n \t\treturn -rte_errno;\n \t}\n \tcrypto_dev = rte_cryptodev_pmd_create(ibdev_name, dev->dev,\n \t\t\t\t\t      &init_params);\n \tif (crypto_dev == NULL) {\n \t\tDRV_LOG(ERR, \"Failed to create device \\\"%s\\\".\", ibdev_name);\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n \t\treturn -ENODEV;\n \t}\n \tDRV_LOG(INFO, \"Crypto device %s was created successfully.\", ibdev_name);\n@@ -1025,8 +1002,6 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)\n \tpriv->crypto_dev = crypto_dev;\n \tif (mlx5_crypto_hw_global_prepare(priv) != 0) {\n \t\trte_cryptodev_pmd_destroy(priv->crypto_dev);\n-\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\tmlx5_free(priv->dev_ctx);\n \t\treturn -1;\n \t}\n \tif (mlx5_mr_btree_init(&priv->mr_scache.cache,\n@@ -1034,8 +1009,6 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)\n \t\tDRV_LOG(ERR, \"Failed to allocate shared cache MR memory.\");\n \t\tmlx5_crypto_hw_global_release(priv);\n \t\trte_cryptodev_pmd_destroy(priv->crypto_dev);\n-\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\tmlx5_free(priv->dev_ctx);\n \t\trte_errno = ENOMEM;\n \t\treturn -rte_errno;\n \t}\n@@ -1085,8 +1058,7 @@ mlx5_crypto_dev_remove(struct mlx5_common_device *dev)\n \t\tmlx5_crypto_hw_global_release(priv);\n \t\trte_cryptodev_pmd_destroy(priv->crypto_dev);\n \t\tclaim_zero(mlx5_devx_cmd_destroy(priv->login_obj));\n-\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\tmlx5_free(priv->dev_ctx);\n+\t\tpriv->dev_ctx = NULL;\n \t}\n \treturn 0;\n }\ndiff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c\nindex 812aadaaa4..c8134f064f 100644\n--- a/drivers/net/mlx5/linux/mlx5_os.c\n+++ b/drivers/net/mlx5/linux/mlx5_os.c\n@@ -2882,31 +2882,24 @@ mlx5_verbs_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev)\n int\n mlx5_os_net_probe(struct mlx5_common_device *dev)\n {\n-\tstruct mlx5_dev_ctx *dev_ctx;\n+\tstruct mlx5_dev_ctx *dev_ctx = &dev->ctx;\n \tuint8_t devx = 0;\n \tint ret;\n \n-\tdev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),\n-\t\t\t      RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n-\tif (dev_ctx == NULL) {\n-\t\tDRV_LOG(ERR, \"Device context allocation failure.\");\n-\t\trte_errno = ENOMEM;\n-\t\treturn -rte_errno;\n-\t}\n \t/*\n-\t * Initialize context device and allocate all its resources.\n-\t * Try to do it with DV first, then usual Verbs.\n+\t * Context device and all its resources are created and initialized\n+\t * while common probing, using DevX API. When DevX isn't supported,\n+\t * we are trying to create them by Verbs only for net driver.\n+\t * Here, we check if the ctx creates successfully, and if not try to\n+\t * create it by Verbs.\n \t */\n-\tret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_ETH);\n-\tif (ret < 0) {\n-\t\tgoto error;\n-\t} else if (dev_ctx->ctx) {\n+\tif (dev_ctx->ctx) {\n \t\tdevx = 1;\n \t\tDRV_LOG(DEBUG, \"DevX is supported.\");\n \t} else {\n \t\tret = mlx5_verbs_dev_ctx_prepare(dev_ctx, dev->dev);\n \t\tif (ret < 0)\n-\t\t\tgoto error;\n+\t\t\treturn -rte_errno;\n \t\tDRV_LOG(DEBUG, \"DevX is NOT supported.\");\n \t}\n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY)\n@@ -2915,19 +2908,12 @@ mlx5_os_net_probe(struct mlx5_common_device *dev)\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"unable to init PMD global data: %s\",\n \t\t\tstrerror(rte_errno));\n-\t\tgoto error;\n+\t\treturn -rte_errno;\n \t}\n \tif (mlx5_dev_is_pci(dev->dev))\n-\t\tret = mlx5_os_pci_probe(dev, dev_ctx, devx);\n+\t\treturn mlx5_os_pci_probe(dev, dev_ctx, devx);\n \telse\n-\t\tret = mlx5_os_auxiliary_probe(dev->dev, dev_ctx, devx);\n-\tif (ret)\n-\t\tgoto error;\n-\treturn ret;\n-error:\n-\tmlx5_dev_ctx_release(dev_ctx);\n-\tmlx5_free(dev_ctx);\n-\treturn ret;\n+\t\treturn mlx5_os_auxiliary_probe(dev->dev, dev_ctx, devx);\n }\n \n /**\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex e0b180e83c..085bf87abc 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -2355,33 +2355,6 @@ mlx5_eth_find_next(uint16_t port_id, struct rte_device *odev)\n \treturn port_id;\n }\n \n-/**\n- * Finds the device context that match the device.\n- * The existence of multiple ethdev per pci device is only with representors.\n- * On such case, it is enough to get only one of the ports as they all share\n- * the same device context.\n- *\n- * @param dev\n- *   Pointer to the device.\n- *\n- * @return\n- *   Pointer to the device context if found, NULL otherwise.\n- */\n-static struct mlx5_dev_ctx *\n-mlx5_get_dev_ctx(struct rte_device *dev)\n-{\n-\tstruct mlx5_priv *priv;\n-\tuint16_t port_id;\n-\n-\tport_id = rte_eth_find_next_of(0, dev);\n-\tif (port_id == RTE_MAX_ETHPORTS)\n-\t\treturn NULL;\n-\tpriv = rte_eth_devices[port_id].data->dev_private;\n-\tif (priv == NULL)\n-\t\treturn NULL;\n-\treturn priv->sh->dev_ctx;\n-}\n-\n /**\n  * Callback to remove a device.\n  *\n@@ -2396,7 +2369,6 @@ mlx5_get_dev_ctx(struct rte_device *dev)\n int\n mlx5_net_remove(struct mlx5_common_device *dev)\n {\n-\tstruct mlx5_dev_ctx *dev_ctx = mlx5_get_dev_ctx(dev->dev);\n \tuint16_t port_id;\n \tint ret = 0;\n \n@@ -2411,10 +2383,6 @@ mlx5_net_remove(struct mlx5_common_device *dev)\n \t\t\tret |= rte_eth_dev_close(port_id);\n \t}\n \n-\tif (dev_ctx) {\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n-\t}\n \treturn ret == 0 ? 0 : -EIO;\n }\n \ndiff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c\nindex f21fb60272..d269cf2f74 100644\n--- a/drivers/net/mlx5/windows/mlx5_os.c\n+++ b/drivers/net/mlx5/windows/mlx5_os.c\n@@ -878,7 +878,7 @@ int\n mlx5_os_net_probe(struct mlx5_common_device *dev)\n {\n \tstruct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->dev);\n-\tstruct mlx5_dev_ctx *dev_ctx;\n+\tstruct mlx5_dev_ctx *dev_ctx = &dev->ctx;\n \tstruct mlx5_dev_spawn_data spawn = { .pf_bond = -1 };\n \tstruct mlx5_dev_config dev_config;\n \tunsigned int dev_config_vf;\n@@ -895,16 +895,6 @@ mlx5_os_net_probe(struct mlx5_common_device *dev)\n \t\t\tstrerror(rte_errno));\n \t\treturn -rte_errno;\n \t}\n-\tdev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),\n-\t\t\t      RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n-\tif (dev_ctx == NULL) {\n-\t\tDRV_LOG(ERR, \"Device context allocation failure.\");\n-\t\trte_errno = ENOMEM;\n-\t\treturn -rte_errno;\n-\t}\n-\tret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_ETH);\n-\tif (ret < 0)\n-\t\tgoto error;\n \tmemset(&spawn.info, 0, sizeof(spawn.info));\n \tspawn.max_port = 1;\n \tspawn.phys_port = 1;\n@@ -955,20 +945,14 @@ mlx5_os_net_probe(struct mlx5_common_device *dev)\n \tdev_config.decap_en = 0;\n \tdev_config.log_hp_size = MLX5_ARG_UNSET;\n \tspawn.eth_dev = mlx5_dev_spawn(dev->dev, dev_ctx, &spawn, &dev_config);\n-\tif (!spawn.eth_dev) {\n-\t\tret = -rte_errno;\n-\t\tgoto error;\n-\t}\n+\tif (!spawn.eth_dev)\n+\t\treturn -rte_errno;\n \trestore = spawn.eth_dev->data->dev_flags;\n \trte_eth_copy_pci_info(spawn.eth_dev, pci_dev);\n \t/* Restore non-PCI flags cleared by the above call. */\n \tspawn.eth_dev->data->dev_flags |= restore;\n \trte_eth_dev_probing_finish(spawn.eth_dev);\n \treturn 0;\n-error:\n-\tmlx5_dev_ctx_release(dev_ctx);\n-\tmlx5_free(dev_ctx);\n-\treturn ret;\n }\n \n /**\ndiff --git a/drivers/regex/mlx5/mlx5_regex.c b/drivers/regex/mlx5/mlx5_regex.c\nindex 78fa90797c..3772007d24 100644\n--- a/drivers/regex/mlx5/mlx5_regex.c\n+++ b/drivers/regex/mlx5/mlx5_regex.c\n@@ -125,51 +125,36 @@ static int\n mlx5_regex_dev_probe(struct mlx5_common_device *mlx5_dev)\n {\n \tstruct mlx5_regex_priv *priv = NULL;\n-\tstruct mlx5_dev_ctx *dev_ctx = NULL;\n+\tstruct mlx5_dev_ctx *dev_ctx = &mlx5_dev->ctx;\n \tstruct mlx5_hca_attr attr;\n \tchar name[RTE_REGEXDEV_NAME_MAX_LEN];\n-\tconst char *ibdev_name;\n+\tconst char *ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);\n \tint ret;\n \tuint32_t val;\n \n-\tdev_ctx = rte_zmalloc(\"mlx5 context device\", sizeof(*dev_ctx),\n-\t\t\t      RTE_CACHE_LINE_SIZE);\n-\tif (dev_ctx == NULL) {\n-\t\tDRV_LOG(ERR, \"Device context allocation failure.\");\n-\t\trte_errno = ENOMEM;\n-\t\treturn -rte_errno;\n-\t}\n-\tret = mlx5_dev_ctx_prepare(dev_ctx, mlx5_dev->dev, MLX5_CLASS_REGEX);\n-\tif (ret < 0) {\n-\t\tDRV_LOG(ERR, \"Failed to create device context.\");\n-\t\trte_free(dev_ctx);\n-\t\trte_errno = ENODEV;\n-\t\treturn -rte_errno;\n-\t}\n-\tibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);\n \tDRV_LOG(INFO, \"Probe device \\\"%s\\\".\", ibdev_name);\n \tret = mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &attr);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Unable to read HCA capabilities.\");\n \t\trte_errno = ENOTSUP;\n-\t\tgoto dev_error;\n+\t\treturn -rte_errno;\n \t} else if (!attr.regex || attr.regexp_num_of_engines == 0) {\n \t\tDRV_LOG(ERR, \"Not enough capabilities to support RegEx, maybe \"\n \t\t\t\"old FW/OFED version?\");\n \t\trte_errno = ENOTSUP;\n-\t\tgoto dev_error;\n+\t\treturn -rte_errno;\n \t}\n \tif (mlx5_regex_engines_status(dev_ctx->ctx, 2)) {\n \t\tDRV_LOG(ERR, \"RegEx engine error.\");\n \t\trte_errno = ENOMEM;\n-\t\tgoto dev_error;\n+\t\treturn -rte_errno;\n \t}\n \tpriv = rte_zmalloc(\"mlx5 regex device private\", sizeof(*priv),\n \t\t\t   RTE_CACHE_LINE_SIZE);\n \tif (!priv) {\n \t\tDRV_LOG(ERR, \"Failed to allocate private memory.\");\n \t\trte_errno = ENOMEM;\n-\t\tgoto dev_error;\n+\t\treturn -rte_errno;\n \t}\n \tpriv->sq_ts_format = attr.sq_ts_format;\n \tpriv->dev_ctx = dev_ctx;\n@@ -244,10 +229,6 @@ mlx5_regex_dev_probe(struct mlx5_common_device *mlx5_dev)\n \tif (priv->regexdev)\n \t\trte_regexdev_unregister(priv->regexdev);\n dev_error:\n-\tif (dev_ctx) {\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\trte_free(dev_ctx);\n-\t}\n \tif (priv)\n \t\trte_free(priv);\n \treturn -rte_errno;\n@@ -279,10 +260,6 @@ mlx5_regex_dev_remove(struct mlx5_common_device *mlx5_dev)\n \t\t\tmlx5_glue->devx_free_uar(priv->uar);\n \t\tif (priv->regexdev)\n \t\t\trte_regexdev_unregister(priv->regexdev);\n-\t\tif (priv->dev_ctx) {\n-\t\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\t\trte_free(priv->dev_ctx);\n-\t\t}\n \t\trte_free(priv);\n \t}\n \treturn 0;\ndiff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c\nindex 6771445582..2b1b521313 100644\n--- a/drivers/vdpa/mlx5/mlx5_vdpa.c\n+++ b/drivers/vdpa/mlx5/mlx5_vdpa.c\n@@ -506,34 +506,19 @@ static int\n mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)\n {\n \tstruct mlx5_vdpa_priv *priv = NULL;\n-\tstruct mlx5_dev_ctx *dev_ctx = NULL;\n \tstruct mlx5_hca_attr attr;\n \tint ret;\n \n-\tdev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),\n-\t\t\t      RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);\n-\tif (dev_ctx == NULL) {\n-\t\tDRV_LOG(ERR, \"Device context allocation failure.\");\n-\t\trte_errno = ENOMEM;\n-\t\treturn -rte_errno;\n-\t}\n-\tret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_VDPA);\n-\tif (ret < 0) {\n-\t\tDRV_LOG(ERR, \"Failed to create device context.\");\n-\t\tmlx5_free(dev_ctx);\n-\t\trte_errno = ENODEV;\n-\t\treturn -rte_errno;\n-\t}\n-\tret = mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &attr);\n+\tret = mlx5_devx_cmd_query_hca_attr(dev->ctx.ctx, &attr);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Unable to read HCA capabilities.\");\n \t\trte_errno = ENOTSUP;\n-\t\tgoto error;\n+\t\treturn -rte_errno;\n \t} else if (!attr.vdpa.valid || !attr.vdpa.max_num_virtio_queues) {\n \t\tDRV_LOG(ERR, \"Not enough capabilities to support vdpa, maybe \"\n \t\t\t\"old FW/OFED version?\");\n \t\trte_errno = ENOTSUP;\n-\t\tgoto error;\n+\t\treturn -rte_errno;\n \t}\n \tif (!attr.vdpa.queue_counters_valid)\n \t\tDRV_LOG(DEBUG, \"No capability to support virtq statistics.\");\n@@ -544,7 +529,7 @@ mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)\n \tif (!priv) {\n \t\tDRV_LOG(ERR, \"Failed to allocate private memory.\");\n \t\trte_errno = ENOMEM;\n-\t\tgoto error;\n+\t\treturn -rte_errno;\n \t}\n \tpriv->caps = attr.vdpa;\n \tpriv->log_max_rqt_size = attr.log_max_rqt_size;\n@@ -552,8 +537,8 @@ mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)\n \tpriv->qp_ts_format = attr.qp_ts_format;\n \tif (attr.num_lag_ports == 0)\n \t\tpriv->num_lag_ports = 1;\n-\tpriv->dev_ctx = dev_ctx;\n-\tpriv->var = mlx5_glue->dv_alloc_var(dev_ctx->ctx, 0);\n+\tpriv->dev_ctx = &dev->ctx;\n+\tpriv->var = mlx5_glue->dv_alloc_var(priv->dev_ctx->ctx, 0);\n \tif (!priv->var) {\n \t\tDRV_LOG(ERR, \"Failed to allocate VAR %u.\", errno);\n \t\tgoto error;\n@@ -578,10 +563,6 @@ mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)\n \t\t\tmlx5_glue->dv_free_var(priv->var);\n \t\trte_free(priv);\n \t}\n-\tif (dev_ctx) {\n-\t\tmlx5_dev_ctx_release(dev_ctx);\n-\t\tmlx5_free(dev_ctx);\n-\t}\n \treturn -rte_errno;\n }\n \n@@ -610,10 +591,6 @@ mlx5_vdpa_dev_remove(struct mlx5_common_device *dev)\n \t\t}\n \t\tif (priv->vdev)\n \t\t\trte_vdpa_unregister_device(priv->vdev);\n-\t\tif (priv->dev_ctx) {\n-\t\t\tmlx5_dev_ctx_release(priv->dev_ctx);\n-\t\t\tmlx5_free(priv->dev_ctx);\n-\t\t}\n \t\tpthread_mutex_destroy(&priv->vq_config_lock);\n \t\trte_free(priv);\n \t}\n",
    "prefixes": [
        "RFC",
        "15/21"
    ]
}