summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSirshak Das <sirshak.das@arm.com>2018-09-22 14:57:26 -0500
committerDamjan Marion <dmarion@me.com>2018-09-27 18:33:07 +0000
commitc263e48bdb5b1c05ad6fdba536a2cbbaf80405e7 (patch)
tree047dc94ecb9aeb772c8ab0b437670018938b707b
parent412e7b64f9c0b3d5802eee4cd219daff2fcd3dd6 (diff)
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 <sirshak.das@arm.com> Reviewed-by: Lijian Zhang <Lijian.Zhang@arm.com>
-rw-r--r--build-data/packages/external.mk5
-rw-r--r--build/external/packages/dpdk.mk3
-rw-r--r--src/plugins/dpdk/CMakeLists.txt12
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