From c263e48bdb5b1c05ad6fdba536a2cbbaf80405e7 Mon Sep 17 00:00:00 2001 From: Sirshak Das Date: Sat, 22 Sep 2018 14:57:26 -0500 Subject: dpdk_plugin: fix mlx5 build and runtime issues There are issues with VPP finding and linking the mlx5 shared glue library which was built by default if mlx5 was enabled. Runtime Errors this patch fixes: net_mlx5: cannot load glue library: librte_pmd_mlx5_glue.so.18.05.0: cannot open shared object file: No such file or directory net_mlx5: cannot initialize PMD due to missing run-time dependency on rdma-core libraries (libibverbs, libmlx5) This patch introduces additional config parameter to disable glue library building and instead statically link ibverbs and mlx5 libraries to the PMD and dpdk_plugin. Change-Id: I0b2f67652a57854c778e991780903fb15706ace8 Signed-off-by: Sirshak Das Reviewed-by: Lijian Zhang --- build-data/packages/external.mk | 5 +++++ build/external/packages/dpdk.mk | 3 ++- src/plugins/dpdk/CMakeLists.txt | 12 ++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/build-data/packages/external.mk b/build-data/packages/external.mk index 138feb78497..1ed3f09af34 100644 --- a/build-data/packages/external.mk +++ b/build-data/packages/external.mk @@ -29,6 +29,11 @@ ifneq ($(DPDK_MLX5_PMD),) DPDK_MAKE_ARGS += DPDK_MLX5_PMD=y endif +DPDK_MLX5_PMD_DLOPEN_DEPS=$(strip $($(PLATFORM)_uses_dpdk_mlx5_dlopen_deps)) +ifneq ($(DPDK_MLX5_PMD_DLOPEN_DEPS),) +DPDK_MAKE_ARGS += DPDK_MLX5_PMD_DLOPEN_DEPS=y +endif + DPDK_MLX4_PMD=$(strip $($(PLATFORM)_uses_dpdk_mlx4_pmd)) ifneq ($(DPDK_MLX4_PMD),) DPDK_MAKE_ARGS += DPDK_MLX4_PMD=y diff --git a/build/external/packages/dpdk.mk b/build/external/packages/dpdk.mk index 72301e543af..aeaa7e4943b 100644 --- a/build/external/packages/dpdk.mk +++ b/build/external/packages/dpdk.mk @@ -17,6 +17,7 @@ DPDK_DOWNLOAD_DIR ?= $(DL_CACHE_DIR) DPDK_DEBUG ?= n DPDK_MLX4_PMD ?= n DPDK_MLX5_PMD ?= n +DPDK_MLX5_PMD_DLOPEN_DEPS ?= n DPDK_TAP_PMD ?= n DPDK_FAILSAFE_PMD ?= n @@ -196,7 +197,7 @@ $(B)/custom-config: $(B)/.patch.ok Makefile $(call set,RTE_LIBRTE_MLX5_PMD,$(DPDK_MLX5_PMD)) $(call set,RTE_LIBRTE_PMD_SOFTNIC,n) $(call set,RTE_LIBRTE_MLX4_DLOPEN_DEPS,$(DPDK_MLX4_PMD)) - $(call set,RTE_LIBRTE_MLX5_DLOPEN_DEPS,$(DPDK_MLX5_PMD)) + $(call set,RTE_LIBRTE_MLX5_DLOPEN_DEPS,$(DPDK_MLX5_PMD_DLOPEN_DEPS)) $(call set,RTE_LIBRTE_PMD_TAP,$(DPDK_TAP_PMD)) $(call set,RTE_LIBRTE_PMD_FAILSAFE,$(DPDK_FAILSAFE_PMD)) @# not needed diff --git a/src/plugins/dpdk/CMakeLists.txt b/src/plugins/dpdk/CMakeLists.txt index a0a083966b3..ed743ea6d9d 100644 --- a/src/plugins/dpdk/CMakeLists.txt +++ b/src/plugins/dpdk/CMakeLists.txt @@ -39,6 +39,9 @@ int main() #endif #ifdef RTE_LIBRTE_MLX5_PMD printf(\"RTE_LIBRTE_MLX5_PMD=%u\\n\", RTE_LIBRTE_MLX5_PMD); +#ifdef RTE_LIBRTE_MLX5_DLOPEN_DEPS + printf(\"RTE_LIBRTE_MLX5_DLOPEN_DEPS=%u\\n\", RTE_LIBRTE_MLX5_DLOPEN_DEPS); +#endif #endif return 0; } @@ -95,8 +98,13 @@ if(DPDK_INCLUDE_DIR AND DPDK_LIB) message(STATUS "DPDK depends on IPSec MB library") endif() if(DPDK_RTE_LIBRTE_MLX4_PMD OR DPDK_RTE_LIBRTE_MLX5_PMD) - set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lmnl") - message(STATUS "DPDK depends on libmnl (Mellanox PMD requirement)") + if (DPDK_RTE_LIBRTE_MLX5_DLOPEN_DEPS) + set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lmnl") + message(STATUS "DPDK depends on libmnl (Mellanox PMD requirement)") + else() + set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lmnl,-libverbs,-lmlx5") + message(STATUS "DPDK depends on libmnl, libibverbs, libmlx5 (Mellanox PMD requirement)") + endif() endif() set(DPDK_LINK_FLAGS "${DPDK_LINK_FLAGS} -Wl,-lnuma") add_vpp_plugin(dpdk -- cgit 1.2.3-korg