From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nelio Laranjeiro Subject: Re: [PATCH v4] net/mlx5: load libmlx5 and libibverbs in run-time Date: Tue, 2 Jan 2018 15:06:31 +0100 Message-ID: <20180102140631.t3o3uhdovl7jlasy@laranjeiro-vm.dev.6wind.com> References: <37757d5cfe32610ef1c7a17d72ea6bc1466023de.1511450393.git.shacharbe@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Cc: dev@dpdk.org, Adrien Mazarguil To: Shachar Beiser Return-path: Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by dpdk.org (Postfix) with ESMTP id AF2441322C for ; Tue, 2 Jan 2018 15:07:20 +0100 (CET) Received: by mail-wm0-f68.google.com with SMTP id b76so61348328wmg.1 for ; Tue, 02 Jan 2018 06:07:20 -0800 (PST) Content-Disposition: inline In-Reply-To: List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Shachar, Please see small comment bellow, On Sun, Dec 31, 2017 at 07:52:51AM +0000, Shachar Beiser wrote: > MLX5 PMD loads libraries: libibverbs and libmlx5. > MLX5 PMD is not linked to external libraries. > > Signed-off-by: Shachar Beiser > --- > v1: > load external libraries in run-time > v2: > * fix checkpatch warnings > v3: > * fix checkpatch warnings > v4: > New MACROs in order to reuse code > --- > config/common_base | 1 + > drivers/net/mlx5/Makefile | 22 ++- > drivers/net/mlx5/lib/mlx5_dll.c | 294 +++++++++++++++++++++++++++++++++++++++ > drivers/net/mlx5/lib/mlx5_dll.h | 103 ++++++++++++++ > drivers/net/mlx5/mlx5.c | 17 ++- > drivers/net/mlx5/mlx5.h | 4 + > drivers/net/mlx5/mlx5_flow.c | 4 + > drivers/net/mlx5/mlx5_mac.c | 4 + > drivers/net/mlx5/mlx5_mr.c | 4 + > drivers/net/mlx5/mlx5_rss.c | 4 + > drivers/net/mlx5/mlx5_rxmode.c | 4 + > drivers/net/mlx5/mlx5_rxq.c | 4 + > drivers/net/mlx5/mlx5_rxtx.c | 4 + > drivers/net/mlx5/mlx5_rxtx.h | 6 +- > drivers/net/mlx5/mlx5_rxtx_vec.c | 4 + > drivers/net/mlx5/mlx5_txq.c | 4 + > mk/rte.app.mk | 8 +- > 17 files changed, 479 insertions(+), 12 deletions(-) > create mode 100644 drivers/net/mlx5/lib/mlx5_dll.c > create mode 100644 drivers/net/mlx5/lib/mlx5_dll.h > > diff --git a/config/common_base b/config/common_base > index b8ee8f9..30c8fcf 100644 > --- a/config/common_base > +++ b/config/common_base > @@ -236,6 +236,7 @@ CONFIG_RTE_LIBRTE_MLX4_TX_MP_CACHE=8 > # Compile burst-oriented Mellanox ConnectX-4 & ConnectX-5 (MLX5) PMD > # > CONFIG_RTE_LIBRTE_MLX5_PMD=n > +CONFIG_RTE_LIBRTE_MLX5_DLL=y > CONFIG_RTE_LIBRTE_MLX5_DEBUG=n > CONFIG_RTE_LIBRTE_MLX5_TX_MP_CACHE=8 Not sure a new configuration item is allowed. If it is, the documentation of such variable is missing. > diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile > index a3984eb..24fa127 100644 > --- a/drivers/net/mlx5/Makefile > +++ b/drivers/net/mlx5/Makefile > @@ -53,18 +53,25 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_rss.c > SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_mr.c > SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow.c > SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_socket.c > - > +ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLL),y) > +SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += lib/mlx5_dll.c > +endif > # Basic CFLAGS. > CFLAGS += -O3 > CFLAGS += -std=c11 -Wall -Wextra > CFLAGS += -g > CFLAGS += -I. > +CFLAGS += -I$(SRCDIR) > CFLAGS += -D_BSD_SOURCE > CFLAGS += -D_DEFAULT_SOURCE > CFLAGS += -D_XOPEN_SOURCE=600 > CFLAGS += $(WERROR_FLAGS) > CFLAGS += -Wno-strict-prototypes > +ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLL),y) > +LDLIBS += -ldl > +else > LDLIBS += -libverbs -lmlx5 > +endif > LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring > LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs > LDLIBS += -lrte_bus_pci > @@ -105,26 +112,28 @@ endif > > mlx5_autoconf.h.new: FORCE > > +VERBS_H := infiniband/verbs.h > +MLX5DV_H := infiniband/mlx5dv.h > mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh > $Q $(RM) -f -- '$@' > $Q sh -- '$<' '$@' \ > HAVE_IBV_DEVICE_VXLAN_SUPPORT \ > - infiniband/verbs.h \ > + $(VERBS_H) \ > enum IBV_DEVICE_VXLAN_SUPPORT \ > $(AUTOCONF_OUTPUT) > $Q sh -- '$<' '$@' \ > HAVE_IBV_WQ_FLAG_RX_END_PADDING \ > - infiniband/verbs.h \ > + $(VERBS_H) \ > enum IBV_WQ_FLAG_RX_END_PADDING \ > $(AUTOCONF_OUTPUT) > $Q sh -- '$<' '$@' \ > HAVE_IBV_MLX5_MOD_MPW \ > - infiniband/mlx5dv.h \ > + $(MLX5DV_H) \ > enum MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED \ > $(AUTOCONF_OUTPUT) > $Q sh -- '$<' '$@' \ > HAVE_IBV_MLX5_MOD_CQE_128B_COMP \ > - infiniband/mlx5dv.h \ > + $(MLX5DV_H) \ > enum MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP \ > $(AUTOCONF_OUTPUT) > $Q sh -- '$<' '$@' \ > @@ -144,10 +153,9 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh > $(AUTOCONF_OUTPUT) > $Q sh -- '$<' '$@' \ > HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT \ > - infiniband/verbs.h \ > + $(VERBS_H) \ > enum IBV_FLOW_SPEC_ACTION_COUNT \ > $(AUTOCONF_OUTPUT) This modification should be inside its own patch, it is not directly related to the this patch itself. > - > # Create mlx5_autoconf.h or update it in case it differs from the new one. > > mlx5_autoconf.h: mlx5_autoconf.h.new > diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c > index cd66fe1..eeef782 100644 > --- a/drivers/net/mlx5/mlx5.c > +++ b/drivers/net/mlx5/mlx5.c > @@ -30,7 +30,8 @@ > * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > - > +#define _GNU_SOURCE > +#include > #include > #include > #include > @@ -39,13 +40,17 @@ > #include > #include > #include > - > +#include The empty line should remain. > /* Verbs header. */ > /* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ > #ifdef PEDANTIC > #pragma GCC diagnostic ignored "-Wpedantic" > #endif > +#ifdef RTE_LIBRTE_MLX5_DLL > +#include "lib/mlx5_dll.h" > +#else > #include > +#endif This could be done by the mlx5_dll.h file which could include the correct header according to the configuration. > diff --git a/mk/rte.app.mk b/mk/rte.app.mk > index 6a6a745..2dd2f6b 100644 > --- a/mk/rte.app.mk > +++ b/mk/rte.app.mk > @@ -51,7 +51,9 @@ endif > > # Link only the libraries used in the application > LDFLAGS += --as-needed > - > +ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLL),y) > +LDFLAGS += -ldl > +endif > # default path for libs > _LDLIBS-y += -L$(RTE_SDK_BIN)/lib > > @@ -142,7 +144,11 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_KNI) += -lrte_pmd_kni > endif > _LDLIBS-$(CONFIG_RTE_LIBRTE_LIO_PMD) += -lrte_pmd_lio > _LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += -lrte_pmd_mlx4 -libverbs -lmlx4 > +ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLL),y) > +_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += -lrte_pmd_mlx5 -ldl > +else > _LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += -lrte_pmd_mlx5 -libverbs -lmlx5 > +endif > _LDLIBS-$(CONFIG_RTE_LIBRTE_MRVL_PMD) += -lrte_pmd_mrvl -L$(LIBMUSDK_PATH)/lib -lmusdk > _LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += -lrte_pmd_nfp > _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += -lrte_pmd_null > -- > 1.8.3.1 > Thanks, -- Nélio Laranjeiro 6WIND