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 A0AE5A0524; Thu, 30 Jan 2020 09:38:30 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8E4F01BFE5; Thu, 30 Jan 2020 09:38:29 +0100 (CET) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80073.outbound.protection.outlook.com [40.107.8.73]) by dpdk.org (Postfix) with ESMTP id 155EA1BFCD for ; Thu, 30 Jan 2020 09:38:28 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C7szUo+kvqmncYCka4rTL/AibJfM6VM+kIvp9N63XtOriqJ5WjLs+4jIGm+u4Hwposofzn2+lK6hMICN4AfDVCpeGhQJAuZeVxVniZwU+D590mSEMovt8hOUxSk/aByY2hy+v9ZPbRdlQaZeg3KRtIC7t5UOo5j8bK3KWk5A5k2sPqCZy4oOuB8TXIi3dXtkXo+IkAoS6rFS6Yup+54Qsj0wCCbUV9S9lDnhHAekIuTSSmYO8O1I5CZsd6lYd4go2a+koyJNuP66SKr0wDOwJPu/0ElGodOh3+VMZOGXRltCvWyTPiV0CCr2alyC9s6KsKceP746lSeheoJZ7bprJA== 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=0EoH0Cgztc2/khjF0o2vpVu4mFDY4NQlDftiHtOyrrw=; b=CSdpNJkBRAZHsgjo37Xcq0fRNgHMjjrtrn21RUYtnRkz2/Obs+AAebZg6kvvRIpmRBPGomEH1OrxRuU021SWMfTLG7juxBGVdTz7/Tyrbc0Gi2YlEXqyWSVN0vK2thXg+igX7BLcfvOsa1cHaJiUj6+jJajAQDFjfzanlzES2Z1yFMAJs836q5K/1oGPsvyJkeIsnGSNLDc44vNXNpq1Kv9O39aIcc/NGF57chSIBAnK2o/6Kusx4ScwaMbvmEOVzjyr8XS//Xs3Ss0G5n1UfwnE0tm89MRExuObv+kFVFD8AeHqelSc346csb8Kwiis/lcUgXLWxs+Q1WmwYLqnKQ== 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=0EoH0Cgztc2/khjF0o2vpVu4mFDY4NQlDftiHtOyrrw=; b=cs91lox29TyTd5DmMiz+ESdZMd9Jlm/lIFEbLJAz5xTyCP+9ow14p0gHcIhCYtpIQaOvd3FdlzHoVpxjwVESX8d7zPmopim+WkpYpioNXZs///Pcr5oFwFZW8EOYl0lf6B4JmgJFk2DNmJOPp2FYKGdPrryDoedKa6EbCeORMwc= Received: from VI1PR05MB6718.eurprd05.prod.outlook.com (10.186.162.137) by VI1PR05MB4575.eurprd05.prod.outlook.com (20.176.2.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.20; Thu, 30 Jan 2020 08:38:26 +0000 Received: from VI1PR05MB6718.eurprd05.prod.outlook.com ([fe80::25a1:c32b:29a1:fe8f]) by VI1PR05MB6718.eurprd05.prod.outlook.com ([fe80::25a1:c32b:29a1:fe8f%3]) with mapi id 15.20.2665.027; Thu, 30 Jan 2020 08:38:26 +0000 From: Raslan Darawsheh To: Matan Azrad , "dev@dpdk.org" , Slava Ovsiienko Thread-Topic: [dpdk-dev] [PATCH v4 03/25] common/mlx5: share the mlx5 glue reference Thread-Index: AQHV10SySX8o3TLV20uMuTpA4nDEWagC4pFg Date: Thu, 30 Jan 2020 08:38:26 +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: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=rasland@mellanox.com; x-originating-ip: [212.29.221.74] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: ae86fcea-fef5-4fec-63af-08d7a55fc67c x-ms-traffictypediagnostic: VI1PR05MB4575:|VI1PR05MB4575: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:454; x-forefront-prvs: 02981BE340 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(376002)(366004)(346002)(39860400002)(396003)(189003)(199004)(71200400001)(110136005)(9686003)(8936002)(6636002)(55016002)(6506007)(7696005)(66946007)(66446008)(66476007)(53546011)(86362001)(64756008)(76116006)(66556008)(52536014)(33656002)(186003)(5660300002)(478600001)(316002)(81166006)(81156014)(2906002)(30864003)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB4575; H:VI1PR05MB6718.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A: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: sXQbwl27RTJJSRkTjxJRVeUl9pjMJWiBrsNNSSjhSfRZiu4wNefgL/CqvLZvblaH2zFiA/NusEfFBwPTy6Py/mJ2RxjUp6NK3BJ5dD0HlDWHj8DHFr5GvUdsdJHEqh3NnDkuEfdGVvKsar6aP5hDp8RvMxPjb/pAMMeONfBT5h7TuLIdIRvJgtualVXC0yOPkoG1UAuzIdLfrWYERuabrdZS7GHPSOAp2Hz262myOEbu8hkSt0b15gA55qJMrAnVKDEwzQCDcu/ez7RXXblfSS94aQGgAeW3uFi/lcNACJjgkfyIWZ4YFgDnfdj0YSN/aQ6oUL8DYAOQRrttksJvk3sMS0G2clWe388Sp3gwHks21HKFnPQSNDas9Qw+DciVi+jhtdiXl98703xV9J0GJ7EOemHW/86B4fzApOeWdgE1iqIk8TAt5T6sLTxSL5Ml x-ms-exchange-antispam-messagedata: H1afqoGds0p6AFwfLkirUKk3lyETLLJM1kMDIOe40mTGV/qVExRbGehFaqiFEU022YGrmZDR4tqe9GTaI1FFgQisv0GOuqNODf/APgZLAsWJVN+6aaRaGGs4uWER36eRhwQX57XMZk54GQAIdW9/nw== 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: ae86fcea-fef5-4fec-63af-08d7a55fc67c X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2020 08:38:26.4680 (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: QmukIBtGcVH/nluyeu2I86sHo3KVtsK7KcZ6J5OsTGoa31hY2F4so+TjWU4jn1SbfUqiZlnklSKRHVPAexjyFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB4575 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" I agree with you, I'll work on squashing the two patches together during integration. Kindest regards, Raslan Darawsheh > -----Original Message----- > From: Matan Azrad > Sent: Thursday, January 30, 2020 10:10 AM > To: Matan Azrad ; dev@dpdk.org; Slava Ovsiienko > > Cc: Raslan Darawsheh > Subject: RE: [dpdk-dev] [PATCH v4 03/25] common/mlx5: share the mlx5 glue > reference >=20 > Self-suggestion. > It makes sense to squash this patch to the previous patch since the glue > started to move in the previous patch. >=20 > Raslan, can we do it in integration or we need to send all the series aga= in for > it? >=20 > From: Matan Azrad > > A new Mellanox vdpa PMD will be added to support vdpa operations by > > Mellanox adapters. > > > > Both, the mlx5 PMD and the vdpa mlx5 PMD should initialize the glue. > > > > The glue initialization should be only one per process, so all the > > mlx5 PMDs using the glue should share the same glue object. > > > > Move the glue initialization to be in common/mlx5 library to be > > initialized by its constructor only once. > > > > 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(-) > > > > 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 > > */ > > > > +#include > > +#include > > +#include > > + > > +#include > > + > > #include "mlx5_common.h" > > +#include "mlx5_common_utils.h" > > +#include "mlx5_glue.h" > > > > > > int mlx5_common_logtype; > > > > > > -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 > > > > # 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 > > > > # 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 > > > > -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, > > }; > > > > -#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); > > } > > > > RTE_PMD_EXPORT_NAME(net_mlx5, __COUNTER__); > > -- > > 1.8.3.1