get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 65205,
    "url": "http://patches.dpdk.org/api/patches/65205/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1580205965-21492-4-git-send-email-matan@mellanox.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": "<1580205965-21492-4-git-send-email-matan@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1580205965-21492-4-git-send-email-matan@mellanox.com",
    "date": "2020-01-28T10:05:43",
    "name": "[v2,03/25] common/mlx5: share the mlx5 glue reference",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "27d25a8bd00a73dd779214b47251f986a90d09db",
    "submitter": {
        "id": 796,
        "url": "http://patches.dpdk.org/api/people/796/?format=api",
        "name": "Matan Azrad",
        "email": "matan@mellanox.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/1580205965-21492-4-git-send-email-matan@mellanox.com/mbox/",
    "series": [
        {
            "id": 8319,
            "url": "http://patches.dpdk.org/api/series/8319/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8319",
            "date": "2020-01-28T10:05:40",
            "name": "Introduce mlx5 common library",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/8319/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/65205/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/65205/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id AA431A04B3;\n\tTue, 28 Jan 2020 11:06:57 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 8A3D01C1AF;\n\tTue, 28 Jan 2020 11:06:57 +0100 (CET)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id 2B4A91C1AB\n for <dev@dpdk.org>; Tue, 28 Jan 2020 11:06:56 +0100 (CET)",
            "from Internal Mail-Server by MTLPINE2 (envelope-from\n asafp@mellanox.com)\n with ESMTPS (AES256-SHA encrypted); 28 Jan 2020 12:06:54 +0200",
            "from pegasus07.mtr.labs.mlnx (pegasus07.mtr.labs.mlnx\n [10.210.16.112])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00SA6Fp6016102;\n Tue, 28 Jan 2020 12:06:54 +0200"
        ],
        "From": "Matan Azrad <matan@mellanox.com>",
        "To": "dev@dpdk.org, Viacheslav Ovsiienko <viacheslavo@mellanox.com>",
        "Cc": "Raslan Darawsheh <rasland@mellanox.com>",
        "Date": "Tue, 28 Jan 2020 10:05:43 +0000",
        "Message-Id": "<1580205965-21492-4-git-send-email-matan@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1580205965-21492-1-git-send-email-matan@mellanox.com>",
        "References": "<1579539790-3882-1-git-send-email-matan@mellanox.com>\n <1580205965-21492-1-git-send-email-matan@mellanox.com>",
        "Subject": "[dpdk-dev] [PATCH v2 03/25] common/mlx5: share the mlx5 glue\n\treference",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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": "A new Mellanox vdpa PMD will be added to support vdpa operations by\nMellanox adapters.\n\nBoth, the mlx5 PMD and the vdpa mlx5 PMD should initialize the glue.\n\nThe glue initialization should be only one per process, so all the mlx5\nPMDs using the glue should share the same glue object.\n\nMove the glue initialization to be in common/mlx5 library to be\ninitialized by its constructor only once.\n\nSigned-off-by: Matan Azrad <matan@mellanox.com>\nAcked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>\n---\n drivers/common/mlx5/mlx5_common.c | 173 +++++++++++++++++++++++++++++++++++++-\n drivers/net/mlx5/Makefile         |   9 --\n drivers/net/mlx5/meson.build      |   4 -\n drivers/net/mlx5/mlx5.c           | 172 +------------------------------------\n 4 files changed, 173 insertions(+), 185 deletions(-)",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c\nindex 14ebd30..26d7a87 100644\n--- a/drivers/common/mlx5/mlx5_common.c\n+++ b/drivers/common/mlx5/mlx5_common.c\n@@ -2,16 +2,185 @@\n  * Copyright 2019 Mellanox Technologies, Ltd\n  */\n \n+#include <dlfcn.h>\n+#include <unistd.h>\n+#include <string.h>\n+\n+#include <rte_errno.h>\n+\n #include \"mlx5_common.h\"\n+#include \"mlx5_common_utils.h\"\n+#include \"mlx5_glue.h\"\n \n \n int mlx5_common_logtype;\n \n \n-RTE_INIT(rte_mlx5_common_pmd_init)\n+#ifdef RTE_IBVERBS_LINK_DLOPEN\n+\n+/**\n+ * Suffix RTE_EAL_PMD_PATH with \"-glue\".\n+ *\n+ * This function performs a sanity check on RTE_EAL_PMD_PATH before\n+ * suffixing its last component.\n+ *\n+ * @param buf[out]\n+ *   Output buffer, should be large enough otherwise NULL is returned.\n+ * @param size\n+ *   Size of @p out.\n+ *\n+ * @return\n+ *   Pointer to @p buf or @p NULL in case suffix cannot be appended.\n+ */\n+static char *\n+mlx5_glue_path(char *buf, size_t size)\n+{\n+\tstatic const char *const bad[] = { \"/\", \".\", \"..\", NULL };\n+\tconst char *path = RTE_EAL_PMD_PATH;\n+\tsize_t len = strlen(path);\n+\tsize_t off;\n+\tint i;\n+\n+\twhile (len && path[len - 1] == '/')\n+\t\t--len;\n+\tfor (off = len; off && path[off - 1] != '/'; --off)\n+\t\t;\n+\tfor (i = 0; bad[i]; ++i)\n+\t\tif (!strncmp(path + off, bad[i], (int)(len - off)))\n+\t\t\tgoto error;\n+\ti = snprintf(buf, size, \"%.*s-glue\", (int)len, path);\n+\tif (i == -1 || (size_t)i >= size)\n+\t\tgoto error;\n+\treturn buf;\n+error:\n+\tRTE_LOG(ERR, PMD, \"unable to append \\\"-glue\\\" to last component of\"\n+\t\t\" RTE_EAL_PMD_PATH (\\\"\" RTE_EAL_PMD_PATH \"\\\"), please\"\n+\t\t\" re-configure DPDK\");\n+\treturn NULL;\n+}\n+#endif\n+\n+/**\n+ * Initialization routine for run-time dependency on rdma-core.\n+ */\n+RTE_INIT_PRIO(mlx5_glue_init, CLASS)\n {\n-\t/* Initialize driver log type. */\n+\tvoid *handle = NULL;\n+\n+\t/* Initialize common log type. */\n \tmlx5_common_logtype = rte_log_register(\"pmd.common.mlx5\");\n \tif (mlx5_common_logtype >= 0)\n \t\trte_log_set_level(mlx5_common_logtype, RTE_LOG_NOTICE);\n+\t/*\n+\t * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use\n+\t * huge pages. Calling ibv_fork_init() during init allows\n+\t * applications to use fork() safely for purposes other than\n+\t * using this PMD, which is not supported in forked processes.\n+\t */\n+\tsetenv(\"RDMAV_HUGEPAGES_SAFE\", \"1\", 1);\n+\t/* Match the size of Rx completion entry to the size of a cacheline. */\n+\tif (RTE_CACHE_LINE_SIZE == 128)\n+\t\tsetenv(\"MLX5_CQE_SIZE\", \"128\", 0);\n+\t/*\n+\t * MLX5_DEVICE_FATAL_CLEANUP tells ibv_destroy functions to\n+\t * cleanup all the Verbs resources even when the device was removed.\n+\t */\n+\tsetenv(\"MLX5_DEVICE_FATAL_CLEANUP\", \"1\", 1);\n+\t/* The glue initialization was done earlier by mlx5 common library. */\n+#ifdef RTE_IBVERBS_LINK_DLOPEN\n+\tchar glue_path[sizeof(RTE_EAL_PMD_PATH) - 1 + sizeof(\"-glue\")];\n+\tstatic const char *path[] = {\n+\t\t/*\n+\t\t * A basic security check is necessary before trusting\n+\t\t * MLX5_GLUE_PATH, which may override RTE_EAL_PMD_PATH.\n+\t\t */\n+\t\t(geteuid() == getuid() && getegid() == getgid() ?\n+\t\t getenv(\"MLX5_GLUE_PATH\") : NULL),\n+\t\t/*\n+\t\t * When RTE_EAL_PMD_PATH is set, use its glue-suffixed\n+\t\t * variant, otherwise let dlopen() look up libraries on its\n+\t\t * own.\n+\t\t */\n+\t\t(*RTE_EAL_PMD_PATH ?\n+\t\t mlx5_glue_path(glue_path, sizeof(glue_path)) : \"\"),\n+\t};\n+\tunsigned int i = 0;\n+\tvoid **sym;\n+\tconst char *dlmsg;\n+\n+\twhile (!handle && i != RTE_DIM(path)) {\n+\t\tconst char *end;\n+\t\tsize_t len;\n+\t\tint ret;\n+\n+\t\tif (!path[i]) {\n+\t\t\t++i;\n+\t\t\tcontinue;\n+\t\t}\n+\t\tend = strpbrk(path[i], \":;\");\n+\t\tif (!end)\n+\t\t\tend = path[i] + strlen(path[i]);\n+\t\tlen = end - path[i];\n+\t\tret = 0;\n+\t\tdo {\n+\t\t\tchar name[ret + 1];\n+\n+\t\t\tret = snprintf(name, sizeof(name), \"%.*s%s\" MLX5_GLUE,\n+\t\t\t\t       (int)len, path[i],\n+\t\t\t\t       (!len || *(end - 1) == '/') ? \"\" : \"/\");\n+\t\t\tif (ret == -1)\n+\t\t\t\tbreak;\n+\t\t\tif (sizeof(name) != (size_t)ret + 1)\n+\t\t\t\tcontinue;\n+\t\t\tDRV_LOG(DEBUG, \"Looking for rdma-core glue as \"\n+\t\t\t\t\"\\\"%s\\\"\", name);\n+\t\t\thandle = dlopen(name, RTLD_LAZY);\n+\t\t\tbreak;\n+\t\t} while (1);\n+\t\tpath[i] = end + 1;\n+\t\tif (!*end)\n+\t\t\t++i;\n+\t}\n+\tif (!handle) {\n+\t\trte_errno = EINVAL;\n+\t\tdlmsg = dlerror();\n+\t\tif (dlmsg)\n+\t\t\tDRV_LOG(WARNING, \"Cannot load glue library: %s\", dlmsg);\n+\t\tgoto glue_error;\n+\t}\n+\tsym = dlsym(handle, \"mlx5_glue\");\n+\tif (!sym || !*sym) {\n+\t\trte_errno = EINVAL;\n+\t\tdlmsg = dlerror();\n+\t\tif (dlmsg)\n+\t\t\tDRV_LOG(ERR, \"Cannot resolve glue symbol: %s\", dlmsg);\n+\t\tgoto glue_error;\n+\t}\n+\tmlx5_glue = *sym;\n+#endif /* RTE_IBVERBS_LINK_DLOPEN */\n+#ifndef NDEBUG\n+\t/* Glue structure must not contain any NULL pointers. */\n+\t{\n+\t\tunsigned int i;\n+\n+\t\tfor (i = 0; i != sizeof(*mlx5_glue) / sizeof(void *); ++i)\n+\t\t\tassert(((const void *const *)mlx5_glue)[i]);\n+\t}\n+#endif\n+\tif (strcmp(mlx5_glue->version, MLX5_GLUE_VERSION)) {\n+\t\trte_errno = EINVAL;\n+\t\tDRV_LOG(ERR, \"rdma-core glue \\\"%s\\\" mismatch: \\\"%s\\\" is \"\n+\t\t\t\"required\", mlx5_glue->version, MLX5_GLUE_VERSION);\n+\t\tgoto glue_error;\n+\t}\n+\tmlx5_glue->fork_init();\n+\treturn;\n+glue_error:\n+\tif (handle)\n+\t\tdlclose(handle);\n+\tDRV_LOG(WARNING, \"Cannot initialize MLX5 common due to missing\"\n+\t\t\" run-time dependency on rdma-core libraries (libibverbs,\"\n+\t\t\" libmlx5)\");\n+\tmlx5_glue = NULL;\n+\treturn;\n }\ndiff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile\nindex a9558ca..dc6b3c8 100644\n--- a/drivers/net/mlx5/Makefile\n+++ b/drivers/net/mlx5/Makefile\n@@ -6,15 +6,6 @@ include $(RTE_SDK)/mk/rte.vars.mk\n \n # Library name.\n LIB = librte_pmd_mlx5.a\n-LIB_GLUE = $(LIB_GLUE_BASE).$(LIB_GLUE_VERSION)\n-LIB_GLUE_BASE = librte_pmd_mlx5_glue.so\n-LIB_GLUE_VERSION = 20.02.0\n-\n-ifeq ($(CONFIG_RTE_IBVERBS_LINK_DLOPEN),y)\n-CFLAGS += -DMLX5_GLUE='\"$(LIB_GLUE)\"'\n-CFLAGS += -DMLX5_GLUE_VERSION='\"$(LIB_GLUE_VERSION)\"'\n-LDLIBS += -ldl\n-endif\n \n # Sources.\n SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5.c\ndiff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build\nindex f6d0db9..e10ef3a 100644\n--- a/drivers/net/mlx5/meson.build\n+++ b/drivers/net/mlx5/meson.build\n@@ -8,10 +8,6 @@ if not is_linux\n \tsubdir_done()\n endif\n \n-LIB_GLUE_BASE = 'librte_pmd_mlx5_glue.so'\n-LIB_GLUE_VERSION = '20.02.0'\n-LIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION\n-\n allow_experimental_apis = true\n deps += ['hash', 'common_mlx5']\n sources = files(\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex 7cf357d..8fbe826 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -7,7 +7,6 @@\n #include <unistd.h>\n #include <string.h>\n #include <assert.h>\n-#include <dlfcn.h>\n #include <stdint.h>\n #include <stdlib.h>\n #include <errno.h>\n@@ -3505,138 +3504,6 @@ struct mlx5_flow_id_pool *\n \t\t     RTE_PCI_DRV_PROBE_AGAIN,\n };\n \n-#ifdef RTE_IBVERBS_LINK_DLOPEN\n-\n-/**\n- * Suffix RTE_EAL_PMD_PATH with \"-glue\".\n- *\n- * This function performs a sanity check on RTE_EAL_PMD_PATH before\n- * suffixing its last component.\n- *\n- * @param buf[out]\n- *   Output buffer, should be large enough otherwise NULL is returned.\n- * @param size\n- *   Size of @p out.\n- *\n- * @return\n- *   Pointer to @p buf or @p NULL in case suffix cannot be appended.\n- */\n-static char *\n-mlx5_glue_path(char *buf, size_t size)\n-{\n-\tstatic const char *const bad[] = { \"/\", \".\", \"..\", NULL };\n-\tconst char *path = RTE_EAL_PMD_PATH;\n-\tsize_t len = strlen(path);\n-\tsize_t off;\n-\tint i;\n-\n-\twhile (len && path[len - 1] == '/')\n-\t\t--len;\n-\tfor (off = len; off && path[off - 1] != '/'; --off)\n-\t\t;\n-\tfor (i = 0; bad[i]; ++i)\n-\t\tif (!strncmp(path + off, bad[i], (int)(len - off)))\n-\t\t\tgoto error;\n-\ti = snprintf(buf, size, \"%.*s-glue\", (int)len, path);\n-\tif (i == -1 || (size_t)i >= size)\n-\t\tgoto error;\n-\treturn buf;\n-error:\n-\tDRV_LOG(ERR,\n-\t\t\"unable to append \\\"-glue\\\" to last component of\"\n-\t\t\" RTE_EAL_PMD_PATH (\\\"\" RTE_EAL_PMD_PATH \"\\\"),\"\n-\t\t\" please re-configure DPDK\");\n-\treturn NULL;\n-}\n-\n-/**\n- * Initialization routine for run-time dependency on rdma-core.\n- */\n-static int\n-mlx5_glue_init(void)\n-{\n-\tchar glue_path[sizeof(RTE_EAL_PMD_PATH) - 1 + sizeof(\"-glue\")];\n-\tconst char *path[] = {\n-\t\t/*\n-\t\t * A basic security check is necessary before trusting\n-\t\t * MLX5_GLUE_PATH, which may override RTE_EAL_PMD_PATH.\n-\t\t */\n-\t\t(geteuid() == getuid() && getegid() == getgid() ?\n-\t\t getenv(\"MLX5_GLUE_PATH\") : NULL),\n-\t\t/*\n-\t\t * When RTE_EAL_PMD_PATH is set, use its glue-suffixed\n-\t\t * variant, otherwise let dlopen() look up libraries on its\n-\t\t * own.\n-\t\t */\n-\t\t(*RTE_EAL_PMD_PATH ?\n-\t\t mlx5_glue_path(glue_path, sizeof(glue_path)) : \"\"),\n-\t};\n-\tunsigned int i = 0;\n-\tvoid *handle = NULL;\n-\tvoid **sym;\n-\tconst char *dlmsg;\n-\n-\twhile (!handle && i != RTE_DIM(path)) {\n-\t\tconst char *end;\n-\t\tsize_t len;\n-\t\tint ret;\n-\n-\t\tif (!path[i]) {\n-\t\t\t++i;\n-\t\t\tcontinue;\n-\t\t}\n-\t\tend = strpbrk(path[i], \":;\");\n-\t\tif (!end)\n-\t\t\tend = path[i] + strlen(path[i]);\n-\t\tlen = end - path[i];\n-\t\tret = 0;\n-\t\tdo {\n-\t\t\tchar name[ret + 1];\n-\n-\t\t\tret = snprintf(name, sizeof(name), \"%.*s%s\" MLX5_GLUE,\n-\t\t\t\t       (int)len, path[i],\n-\t\t\t\t       (!len || *(end - 1) == '/') ? \"\" : \"/\");\n-\t\t\tif (ret == -1)\n-\t\t\t\tbreak;\n-\t\t\tif (sizeof(name) != (size_t)ret + 1)\n-\t\t\t\tcontinue;\n-\t\t\tDRV_LOG(DEBUG, \"looking for rdma-core glue as \\\"%s\\\"\",\n-\t\t\t\tname);\n-\t\t\thandle = dlopen(name, RTLD_LAZY);\n-\t\t\tbreak;\n-\t\t} while (1);\n-\t\tpath[i] = end + 1;\n-\t\tif (!*end)\n-\t\t\t++i;\n-\t}\n-\tif (!handle) {\n-\t\trte_errno = EINVAL;\n-\t\tdlmsg = dlerror();\n-\t\tif (dlmsg)\n-\t\t\tDRV_LOG(WARNING, \"cannot load glue library: %s\", dlmsg);\n-\t\tgoto glue_error;\n-\t}\n-\tsym = dlsym(handle, \"mlx5_glue\");\n-\tif (!sym || !*sym) {\n-\t\trte_errno = EINVAL;\n-\t\tdlmsg = dlerror();\n-\t\tif (dlmsg)\n-\t\t\tDRV_LOG(ERR, \"cannot resolve glue symbol: %s\", dlmsg);\n-\t\tgoto glue_error;\n-\t}\n-\tmlx5_glue = *sym;\n-\treturn 0;\n-glue_error:\n-\tif (handle)\n-\t\tdlclose(handle);\n-\tDRV_LOG(WARNING,\n-\t\t\"cannot initialize PMD due to missing run-time dependency on\"\n-\t\t\" rdma-core libraries (libibverbs, libmlx5)\");\n-\treturn -rte_errno;\n-}\n-\n-#endif\n-\n /**\n  * Driver initialization routine.\n  */\n@@ -3651,43 +3518,8 @@ struct mlx5_flow_id_pool *\n \tmlx5_set_ptype_table();\n \tmlx5_set_cksum_table();\n \tmlx5_set_swp_types_table();\n-\t/*\n-\t * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use\n-\t * huge pages. Calling ibv_fork_init() during init allows\n-\t * applications to use fork() safely for purposes other than\n-\t * using this PMD, which is not supported in forked processes.\n-\t */\n-\tsetenv(\"RDMAV_HUGEPAGES_SAFE\", \"1\", 1);\n-\t/* Match the size of Rx completion entry to the size of a cacheline. */\n-\tif (RTE_CACHE_LINE_SIZE == 128)\n-\t\tsetenv(\"MLX5_CQE_SIZE\", \"128\", 0);\n-\t/*\n-\t * MLX5_DEVICE_FATAL_CLEANUP tells ibv_destroy functions to\n-\t * cleanup all the Verbs resources even when the device was removed.\n-\t */\n-\tsetenv(\"MLX5_DEVICE_FATAL_CLEANUP\", \"1\", 1);\n-#ifdef RTE_IBVERBS_LINK_DLOPEN\n-\tif (mlx5_glue_init())\n-\t\treturn;\n-\tassert(mlx5_glue);\n-#endif\n-#ifndef NDEBUG\n-\t/* Glue structure must not contain any NULL pointers. */\n-\t{\n-\t\tunsigned int i;\n-\n-\t\tfor (i = 0; i != sizeof(*mlx5_glue) / sizeof(void *); ++i)\n-\t\t\tassert(((const void *const *)mlx5_glue)[i]);\n-\t}\n-#endif\n-\tif (strcmp(mlx5_glue->version, MLX5_GLUE_VERSION)) {\n-\t\tDRV_LOG(ERR,\n-\t\t\t\"rdma-core glue \\\"%s\\\" mismatch: \\\"%s\\\" is required\",\n-\t\t\tmlx5_glue->version, MLX5_GLUE_VERSION);\n-\t\treturn;\n-\t}\n-\tmlx5_glue->fork_init();\n-\trte_pci_register(&mlx5_driver);\n+\tif (mlx5_glue)\n+\t\trte_pci_register(&mlx5_driver);\n }\n \n RTE_PMD_EXPORT_NAME(net_mlx5, __COUNTER__);\n",
    "prefixes": [
        "v2",
        "03/25"
    ]
}