diff options
author | Sirshak Das <sirshak.das@arm.com> | 2018-09-22 14:57:26 -0500 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-09-27 18:33:07 +0000 |
commit | c263e48bdb5b1c05ad6fdba536a2cbbaf80405e7 (patch) | |
tree | 047dc94ecb9aeb772c8ab0b437670018938b707b | |
parent | 412e7b64f9c0b3d5802eee4cd219daff2fcd3dd6 (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.mk | 5 | ||||
-rw-r--r-- | build/external/packages/dpdk.mk | 3 | ||||
-rw-r--r-- | 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 |