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>
This commit is contained in:
Sirshak Das
2018-09-22 14:57:26 -05:00
committed by Damjan Marion
parent 412e7b64f9
commit c263e48bdb
3 changed files with 17 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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