From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 23EC6A0524; Thu, 30 Jan 2020 09:10:16 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B4E2A1BFF6; Thu, 30 Jan 2020 09:10:14 +0100 (CET) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60062.outbound.protection.outlook.com [40.107.6.62]) by dpdk.org (Postfix) with ESMTP id C4D531BFE6 for ; Thu, 30 Jan 2020 09:10:13 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GHVIKdXp19k9zpqcX5eTzoIX+kkwSlk7dp0KvXLq10mfroRGUlzRKXh6iEiSEX2V6YCg7HQaLsL+fa9qks7sLO3mr6Kcu6CU/NmhKNcFKDQ+qirpwhlYb5/V1lnuacr1EplF1PMh/h2CdgchH/qN4OoaEQwKYUWmv30ODtu3k70IVgmNOk6NSqPhHKPqvYseCnTm5EZdDcrT1b7H4tikOrMdzHYG1BKR2RIsAH1CWWwvfkl7EDJ85djukfhQAy4tbk9/8xKAvjOn9gqArfiIVP7m4PYi5ZIHbETIdAZVHdipb4QQJDRMFPnrN2IDQ9oLauxl3KE3AZvwheh5/IVSiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7XT2IFgzqbFDqcpUbnwYyxLLmVBMZ+Hs1eDVPlKejhA=; b=gOG62hjho/vMEKwHtIGCYD7qQsRTtkC0TdT0rXytq6gWwB14n9TA7rbRYdcWS4Jw4BO4m8CK1Ep4vkb4hmsf8NHX9/MTeD4ighipEFdLBaHzVM1KcDbrIqwZox9WB4Z4l8dbhoFbhFnsM4DsDfU0wQZjTe7KjvzimX5Z5YsKaMBtaeqPAH40LVCNj1UnPS9+WJrxiraTieLpH1yazPK752mwMDH+jUj/jkLnEWbtOZKFHPAYGdO9/iNS+mxe1w6v8c1VJX9/BYnqimWOio7FXow/99EQQ3s+/JwP1gxoauk7DANbOpj/AMoxhfsTkaKD2uCjwOwLaPOziiojfoh8sQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7XT2IFgzqbFDqcpUbnwYyxLLmVBMZ+Hs1eDVPlKejhA=; b=V/+pYhmbDZlQaQ13//YR0KjR8aKHG4n/wuI85MRG3njCc2ZqLIlmY+9pWcBtulN+Ibp0bYKHG/DE3dSN97thkk3tqviWWDpTFkNAIspV1/0Cab57c/RAYPngzhA+Wyjoo9JPyhkWh++MCvd4MTgHR9+7kmLdQANuEKH7Ju0l7gs= Received: from AM0PR0502MB4019.eurprd05.prod.outlook.com (52.133.39.139) by AM0PR0502MB3986.eurprd05.prod.outlook.com (52.133.37.156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.24; Thu, 30 Jan 2020 08:10:12 +0000 Received: from AM0PR0502MB4019.eurprd05.prod.outlook.com ([fe80::e495:9258:db09:1de8]) by AM0PR0502MB4019.eurprd05.prod.outlook.com ([fe80::e495:9258:db09:1de8%7]) with mapi id 15.20.2665.027; Thu, 30 Jan 2020 08:10:12 +0000 From: Matan Azrad To: Matan Azrad , "dev@dpdk.org" , Slava Ovsiienko CC: Raslan Darawsheh Thread-Topic: [dpdk-dev] [PATCH v4 03/25] common/mlx5: share the mlx5 glue reference Thread-Index: AQHV1qEjggC7ONr0cUa7INM2v6aJ9KgC21CQ Date: Thu, 30 Jan 2020 08:10:12 +0000 Message-ID: References: <1580228860-10665-1-git-send-email-matan@mellanox.com> <1580301530-6643-1-git-send-email-matan@mellanox.com> <1580301530-6643-4-git-send-email-matan@mellanox.com> In-Reply-To: <1580301530-6643-4-git-send-email-matan@mellanox.com> Accept-Language: en-US, he-IL Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: a32102b1-d41a-4cd9-f872-08d7a55bd4ba x-ms-traffictypediagnostic: AM0PR0502MB3986:|AM0PR0502MB3986: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1265; x-forefront-prvs: 02981BE340 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(376002)(396003)(136003)(199004)(189003)(66556008)(5660300002)(64756008)(66476007)(8936002)(81156014)(2906002)(110136005)(86362001)(81166006)(66446008)(6506007)(478600001)(107886003)(7696005)(66946007)(76116006)(9686003)(6636002)(316002)(55016002)(4326008)(71200400001)(30864003)(52536014)(186003)(33656002)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB3986; H:AM0PR0502MB4019.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Hwz3QimWDDulc+PHF3evGl7sYAsNreKrG3L7U2BPQd+hDHlHM9951u+ZGPOB1cTsSFWvhUx0as2caVMOq7CrGaJ+Kz+o8L+scI4uL+9HxFKeOhIVkjEsJTf7uszoAMcN3NP38YhDD3S7CBXwEzL7ucqr8YALghLt0qTpxkYsRONqIxbovJRDqeY13GqUV1WR+NHNAlPVlyQ1XnY1S6Hzp0Of2pbvM7PzVfmXbL2K8TlJPJqOC0GIL7HSDGewbkeLrVsS5zdWdx9/HWYwqB3VNbST3C5kYCl1ILammxze376SyjoNlkBrjAqQeHCD6iT+8FSAWLJm8lhMFqNmYJ6/5nYvoV7nZQH8x1TGYTEdTs6RuyLWOun2BfwSeH1z7lKl7UD9ZPHaE6IKG96o4xdkQqQeE9CHLPNJlMlewxRuVOjwHk1HH7kvhrhzZpL9yhAk x-ms-exchange-antispam-messagedata: El0+OcH+vWo/qhezk6x1QDeZ69Hh5x1vF66VUzJ5NgKEDjoZXfAVxq1O0O5cG/0WDXBDDHo4kLBjxjq+ikFbB8iVJ04ezTbP1zzFPgw4ZmxkVo9ggSXyiDBaxEr2K0jJxYEr3xjyzQIwyQftWLXr+A== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: a32102b1-d41a-4cd9-f872-08d7a55bd4ba X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2020 08:10:12.4575 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yWuGqeWxnT90W6IHMfkkZ6Q7n1icjUWm6zhOk7C337or6NVPstziKjjMzAhwO3cegMy/0Muh29YqkvkbAKpRPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3986 Subject: Re: [dpdk-dev] [PATCH v4 03/25] common/mlx5: share the mlx5 glue reference X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Self-suggestion. It makes sense to squash this patch to the previous patch since the glue st= arted to move in the previous patch. Raslan, can we do it in integration or we need to send all the series again= for it?=20 From: Matan Azrad > A new Mellanox vdpa PMD will be added to support vdpa operations by > Mellanox adapters. >=20 > Both, the mlx5 PMD and the vdpa mlx5 PMD should initialize the glue. >=20 > The glue initialization should be only one per process, so all the mlx5 P= MDs > using the glue should share the same glue object. >=20 > Move the glue initialization to be in common/mlx5 library to be initializ= ed by > its constructor only once. >=20 > Signed-off-by: Matan Azrad > Acked-by: Viacheslav Ovsiienko > --- > drivers/common/mlx5/mlx5_common.c | 173 > +++++++++++++++++++++++++++++++++++++- > drivers/net/mlx5/Makefile | 9 -- > drivers/net/mlx5/meson.build | 4 - > drivers/net/mlx5/mlx5.c | 172 +-------------------------------= ----- > 4 files changed, 173 insertions(+), 185 deletions(-) >=20 > diff --git a/drivers/common/mlx5/mlx5_common.c > b/drivers/common/mlx5/mlx5_common.c > index 14ebd30..9c88a63 100644 > --- a/drivers/common/mlx5/mlx5_common.c > +++ b/drivers/common/mlx5/mlx5_common.c > @@ -2,16 +2,185 @@ > * Copyright 2019 Mellanox Technologies, Ltd > */ >=20 > +#include > +#include > +#include > + > +#include > + > #include "mlx5_common.h" > +#include "mlx5_common_utils.h" > +#include "mlx5_glue.h" >=20 >=20 > int mlx5_common_logtype; >=20 >=20 > -RTE_INIT(rte_mlx5_common_pmd_init) > +#ifdef RTE_IBVERBS_LINK_DLOPEN > + > +/** > + * Suffix RTE_EAL_PMD_PATH with "-glue". > + * > + * This function performs a sanity check on RTE_EAL_PMD_PATH before > + * suffixing its last component. > + * > + * @param buf[out] > + * Output buffer, should be large enough otherwise NULL is returned. > + * @param size > + * Size of @p out. > + * > + * @return > + * Pointer to @p buf or @p NULL in case suffix cannot be appended. > + */ > +static char * > +mlx5_glue_path(char *buf, size_t size) > +{ > + static const char *const bad[] =3D { "/", ".", "..", NULL }; > + const char *path =3D RTE_EAL_PMD_PATH; > + size_t len =3D strlen(path); > + size_t off; > + int i; > + > + while (len && path[len - 1] =3D=3D '/') > + --len; > + for (off =3D len; off && path[off - 1] !=3D '/'; --off) > + ; > + for (i =3D 0; bad[i]; ++i) > + if (!strncmp(path + off, bad[i], (int)(len - off))) > + goto error; > + i =3D snprintf(buf, size, "%.*s-glue", (int)len, path); > + if (i =3D=3D -1 || (size_t)i >=3D size) > + goto error; > + return buf; > +error: > + RTE_LOG(ERR, PMD, "unable to append \"-glue\" to last component > of" > + " RTE_EAL_PMD_PATH (\"" RTE_EAL_PMD_PATH "\"), > please" > + " re-configure DPDK"); > + return NULL; > +} > +#endif > + > +/** > + * Initialization routine for run-time dependency on rdma-core. > + */ > +RTE_INIT_PRIO(mlx5_glue_init, CLASS) > { > - /* Initialize driver log type. */ > + void *handle =3D NULL; > + > + /* Initialize common log type. */ > mlx5_common_logtype =3D rte_log_register("pmd.common.mlx5"); > if (mlx5_common_logtype >=3D 0) > rte_log_set_level(mlx5_common_logtype, > RTE_LOG_NOTICE); > + /* > + * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use > + * huge pages. Calling ibv_fork_init() during init allows > + * applications to use fork() safely for purposes other than > + * using this PMD, which is not supported in forked processes. > + */ > + setenv("RDMAV_HUGEPAGES_SAFE", "1", 1); > + /* Match the size of Rx completion entry to the size of a cacheline. */ > + if (RTE_CACHE_LINE_SIZE =3D=3D 128) > + setenv("MLX5_CQE_SIZE", "128", 0); > + /* > + * MLX5_DEVICE_FATAL_CLEANUP tells ibv_destroy functions to > + * cleanup all the Verbs resources even when the device was > removed. > + */ > + setenv("MLX5_DEVICE_FATAL_CLEANUP", "1", 1); > + /* The glue initialization was done earlier by mlx5 common library. */ > +#ifdef RTE_IBVERBS_LINK_DLOPEN > + char glue_path[sizeof(RTE_EAL_PMD_PATH) - 1 + sizeof("-glue")]; > + const char *path[] =3D { > + /* > + * A basic security check is necessary before trusting > + * MLX5_GLUE_PATH, which may override > RTE_EAL_PMD_PATH. > + */ > + (geteuid() =3D=3D getuid() && getegid() =3D=3D getgid() ? > + getenv("MLX5_GLUE_PATH") : NULL), > + /* > + * When RTE_EAL_PMD_PATH is set, use its glue-suffixed > + * variant, otherwise let dlopen() look up libraries on its > + * own. > + */ > + (*RTE_EAL_PMD_PATH ? > + mlx5_glue_path(glue_path, sizeof(glue_path)) : ""), > + }; > + unsigned int i =3D 0; > + void **sym; > + const char *dlmsg; > + > + while (!handle && i !=3D RTE_DIM(path)) { > + const char *end; > + size_t len; > + int ret; > + > + if (!path[i]) { > + ++i; > + continue; > + } > + end =3D strpbrk(path[i], ":;"); > + if (!end) > + end =3D path[i] + strlen(path[i]); > + len =3D end - path[i]; > + ret =3D 0; > + do { > + char name[ret + 1]; > + > + ret =3D snprintf(name, sizeof(name), "%.*s%s" > MLX5_GLUE, > + (int)len, path[i], > + (!len || *(end - 1) =3D=3D '/') ? "" : "/"); > + if (ret =3D=3D -1) > + break; > + if (sizeof(name) !=3D (size_t)ret + 1) > + continue; > + DRV_LOG(DEBUG, "Looking for rdma-core glue as " > + "\"%s\"", name); > + handle =3D dlopen(name, RTLD_LAZY); > + break; > + } while (1); > + path[i] =3D end + 1; > + if (!*end) > + ++i; > + } > + if (!handle) { > + rte_errno =3D EINVAL; > + dlmsg =3D dlerror(); > + if (dlmsg) > + DRV_LOG(WARNING, "Cannot load glue library: %s", > dlmsg); > + goto glue_error; > + } > + sym =3D dlsym(handle, "mlx5_glue"); > + if (!sym || !*sym) { > + rte_errno =3D EINVAL; > + dlmsg =3D dlerror(); > + if (dlmsg) > + DRV_LOG(ERR, "Cannot resolve glue symbol: %s", > dlmsg); > + goto glue_error; > + } > + mlx5_glue =3D *sym; > +#endif /* RTE_IBVERBS_LINK_DLOPEN */ > +#ifndef NDEBUG > + /* Glue structure must not contain any NULL pointers. */ > + { > + unsigned int i; > + > + for (i =3D 0; i !=3D sizeof(*mlx5_glue) / sizeof(void *); ++i) > + assert(((const void *const *)mlx5_glue)[i]); > + } > +#endif > + if (strcmp(mlx5_glue->version, MLX5_GLUE_VERSION)) { > + rte_errno =3D EINVAL; > + DRV_LOG(ERR, "rdma-core glue \"%s\" mismatch: \"%s\" is " > + "required", mlx5_glue->version, > MLX5_GLUE_VERSION); > + goto glue_error; > + } > + mlx5_glue->fork_init(); > + return; > +glue_error: > + if (handle) > + dlclose(handle); > + DRV_LOG(WARNING, "Cannot initialize MLX5 common due to > missing" > + " run-time dependency on rdma-core libraries (libibverbs," > + " libmlx5)"); > + mlx5_glue =3D NULL; > + return; > } > diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile index > a9558ca..dc6b3c8 100644 > --- a/drivers/net/mlx5/Makefile > +++ b/drivers/net/mlx5/Makefile > @@ -6,15 +6,6 @@ include $(RTE_SDK)/mk/rte.vars.mk >=20 > # Library name. > LIB =3D librte_pmd_mlx5.a > -LIB_GLUE =3D $(LIB_GLUE_BASE).$(LIB_GLUE_VERSION) > -LIB_GLUE_BASE =3D librte_pmd_mlx5_glue.so -LIB_GLUE_VERSION =3D 20.02.0 > - > -ifeq ($(CONFIG_RTE_IBVERBS_LINK_DLOPEN),y) > -CFLAGS +=3D -DMLX5_GLUE=3D'"$(LIB_GLUE)"' > -CFLAGS +=3D -DMLX5_GLUE_VERSION=3D'"$(LIB_GLUE_VERSION)"' > -LDLIBS +=3D -ldl > -endif >=20 > # Sources. > SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) +=3D mlx5.c diff --git > a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build index > f6d0db9..e10ef3a 100644 > --- a/drivers/net/mlx5/meson.build > +++ b/drivers/net/mlx5/meson.build > @@ -8,10 +8,6 @@ if not is_linux > subdir_done() > endif >=20 > -LIB_GLUE_BASE =3D 'librte_pmd_mlx5_glue.so' > -LIB_GLUE_VERSION =3D '20.02.0' > -LIB_GLUE =3D LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION > - > allow_experimental_apis =3D true > deps +=3D ['hash', 'common_mlx5'] > sources =3D files( > diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index > 7cf357d..8fbe826 100644 > --- a/drivers/net/mlx5/mlx5.c > +++ b/drivers/net/mlx5/mlx5.c > @@ -7,7 +7,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -3505,138 +3504,6 @@ struct mlx5_flow_id_pool * > RTE_PCI_DRV_PROBE_AGAIN, > }; >=20 > -#ifdef RTE_IBVERBS_LINK_DLOPEN > - > -/** > - * Suffix RTE_EAL_PMD_PATH with "-glue". > - * > - * This function performs a sanity check on RTE_EAL_PMD_PATH before > - * suffixing its last component. > - * > - * @param buf[out] > - * Output buffer, should be large enough otherwise NULL is returned. > - * @param size > - * Size of @p out. > - * > - * @return > - * Pointer to @p buf or @p NULL in case suffix cannot be appended. > - */ > -static char * > -mlx5_glue_path(char *buf, size_t size) > -{ > - static const char *const bad[] =3D { "/", ".", "..", NULL }; > - const char *path =3D RTE_EAL_PMD_PATH; > - size_t len =3D strlen(path); > - size_t off; > - int i; > - > - while (len && path[len - 1] =3D=3D '/') > - --len; > - for (off =3D len; off && path[off - 1] !=3D '/'; --off) > - ; > - for (i =3D 0; bad[i]; ++i) > - if (!strncmp(path + off, bad[i], (int)(len - off))) > - goto error; > - i =3D snprintf(buf, size, "%.*s-glue", (int)len, path); > - if (i =3D=3D -1 || (size_t)i >=3D size) > - goto error; > - return buf; > -error: > - DRV_LOG(ERR, > - "unable to append \"-glue\" to last component of" > - " RTE_EAL_PMD_PATH (\"" RTE_EAL_PMD_PATH "\")," > - " please re-configure DPDK"); > - return NULL; > -} > - > -/** > - * Initialization routine for run-time dependency on rdma-core. > - */ > -static int > -mlx5_glue_init(void) > -{ > - char glue_path[sizeof(RTE_EAL_PMD_PATH) - 1 + sizeof("-glue")]; > - const char *path[] =3D { > - /* > - * A basic security check is necessary before trusting > - * MLX5_GLUE_PATH, which may override > RTE_EAL_PMD_PATH. > - */ > - (geteuid() =3D=3D getuid() && getegid() =3D=3D getgid() ? > - getenv("MLX5_GLUE_PATH") : NULL), > - /* > - * When RTE_EAL_PMD_PATH is set, use its glue-suffixed > - * variant, otherwise let dlopen() look up libraries on its > - * own. > - */ > - (*RTE_EAL_PMD_PATH ? > - mlx5_glue_path(glue_path, sizeof(glue_path)) : ""), > - }; > - unsigned int i =3D 0; > - void *handle =3D NULL; > - void **sym; > - const char *dlmsg; > - > - while (!handle && i !=3D RTE_DIM(path)) { > - const char *end; > - size_t len; > - int ret; > - > - if (!path[i]) { > - ++i; > - continue; > - } > - end =3D strpbrk(path[i], ":;"); > - if (!end) > - end =3D path[i] + strlen(path[i]); > - len =3D end - path[i]; > - ret =3D 0; > - do { > - char name[ret + 1]; > - > - ret =3D snprintf(name, sizeof(name), "%.*s%s" > MLX5_GLUE, > - (int)len, path[i], > - (!len || *(end - 1) =3D=3D '/') ? "" : "/"); > - if (ret =3D=3D -1) > - break; > - if (sizeof(name) !=3D (size_t)ret + 1) > - continue; > - DRV_LOG(DEBUG, "looking for rdma-core glue as > \"%s\"", > - name); > - handle =3D dlopen(name, RTLD_LAZY); > - break; > - } while (1); > - path[i] =3D end + 1; > - if (!*end) > - ++i; > - } > - if (!handle) { > - rte_errno =3D EINVAL; > - dlmsg =3D dlerror(); > - if (dlmsg) > - DRV_LOG(WARNING, "cannot load glue library: %s", > dlmsg); > - goto glue_error; > - } > - sym =3D dlsym(handle, "mlx5_glue"); > - if (!sym || !*sym) { > - rte_errno =3D EINVAL; > - dlmsg =3D dlerror(); > - if (dlmsg) > - DRV_LOG(ERR, "cannot resolve glue symbol: %s", > dlmsg); > - goto glue_error; > - } > - mlx5_glue =3D *sym; > - return 0; > -glue_error: > - if (handle) > - dlclose(handle); > - DRV_LOG(WARNING, > - "cannot initialize PMD due to missing run-time dependency > on" > - " rdma-core libraries (libibverbs, libmlx5)"); > - return -rte_errno; > -} > - > -#endif > - > /** > * Driver initialization routine. > */ > @@ -3651,43 +3518,8 @@ struct mlx5_flow_id_pool * > mlx5_set_ptype_table(); > mlx5_set_cksum_table(); > mlx5_set_swp_types_table(); > - /* > - * RDMAV_HUGEPAGES_SAFE tells ibv_fork_init() we intend to use > - * huge pages. Calling ibv_fork_init() during init allows > - * applications to use fork() safely for purposes other than > - * using this PMD, which is not supported in forked processes. > - */ > - setenv("RDMAV_HUGEPAGES_SAFE", "1", 1); > - /* Match the size of Rx completion entry to the size of a cacheline. */ > - if (RTE_CACHE_LINE_SIZE =3D=3D 128) > - setenv("MLX5_CQE_SIZE", "128", 0); > - /* > - * MLX5_DEVICE_FATAL_CLEANUP tells ibv_destroy functions to > - * cleanup all the Verbs resources even when the device was > removed. > - */ > - setenv("MLX5_DEVICE_FATAL_CLEANUP", "1", 1); > -#ifdef RTE_IBVERBS_LINK_DLOPEN > - if (mlx5_glue_init()) > - return; > - assert(mlx5_glue); > -#endif > -#ifndef NDEBUG > - /* Glue structure must not contain any NULL pointers. */ > - { > - unsigned int i; > - > - for (i =3D 0; i !=3D sizeof(*mlx5_glue) / sizeof(void *); ++i) > - assert(((const void *const *)mlx5_glue)[i]); > - } > -#endif > - if (strcmp(mlx5_glue->version, MLX5_GLUE_VERSION)) { > - DRV_LOG(ERR, > - "rdma-core glue \"%s\" mismatch: \"%s\" is > required", > - mlx5_glue->version, MLX5_GLUE_VERSION); > - return; > - } > - mlx5_glue->fork_init(); > - rte_pci_register(&mlx5_driver); > + if (mlx5_glue) > + rte_pci_register(&mlx5_driver); > } >=20 > RTE_PMD_EXPORT_NAME(net_mlx5, __COUNTER__); > -- > 1.8.3.1