dpdk_plugin: fix mlx5 build and runtime issues 80/14980/3
authorSirshak Das <sirshak.das@arm.com>
Sat, 22 Sep 2018 19:57:26 +0000 (14:57 -0500)
committerDamjan Marion <dmarion@me.com>
Thu, 27 Sep 2018 18:33:07 +0000 (18:33 +0000)
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>
build-data/packages/external.mk
build/external/packages/dpdk.mk
src/plugins/dpdk/CMakeLists.txt

index 138feb7..1ed3f09 100644 (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
index 72301e5..aeaa7e4 100644 (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
index a0a0839..ed743ea 100644 (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