From e4f94d6b8115a633035c81aa6f61ef405bdde08f Mon Sep 17 00:00:00 2001 From: yinbin Date: Sat, 3 Aug 2024 19:36:50 +0800 Subject: [PATCH] INIT: fix lwip_init failed because of dpdk set errno (cherry picked from commit 9fc987a4da3ce8350fcb28f23917e05e1993b02e) --- ...nit-failed-because-of-dpdk-set-errno.patch | 101 ++++++++++++++++++ lwip.spec | 6 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 0160-INIT-fix-lwip_init-failed-because-of-dpdk-set-errno.patch diff --git a/0160-INIT-fix-lwip_init-failed-because-of-dpdk-set-errno.patch b/0160-INIT-fix-lwip_init-failed-because-of-dpdk-set-errno.patch new file mode 100644 index 0000000..8dc5593 --- /dev/null +++ b/0160-INIT-fix-lwip_init-failed-because-of-dpdk-set-errno.patch @@ -0,0 +1,101 @@ +From 70a390384a97bca7048ec98eabd363e4fdf60bcc Mon Sep 17 00:00:00 2001 +From: yinbin +Date: Sat, 3 Aug 2024 19:31:59 +0800 +Subject: [PATCH] INIT: fix lwip_init failed because of dpdk set errno + +--- + src/api/sys_arch.c | 5 ++++- + src/core/mem.c | 2 -- + src/core/memp.c | 5 +---- + src/include/arch/cc.h | 15 +++++++++++---- + 4 files changed, 16 insertions(+), 11 deletions(-) + +diff --git a/src/api/sys_arch.c b/src/api/sys_arch.c +index 553a1c7..dcfd0a4 100644 +--- a/src/api/sys_arch.c ++++ b/src/api/sys_arch.c +@@ -417,9 +417,12 @@ u8_t *sys_hugepage_malloc(const char *name, unsigned size) + SYS_FORMAT_NAME(memname, sizeof(memname), "%s_%d", name, rte_gettid()); + mz = rte_memzone_reserve(memname, size, rte_socket_id(), 0); + if (mz == NULL) { +- LWIP_DEBUGF(SYS_DEBUG | GAZELLE_DEBUG_SERIOUS, ("sys_hugepage_malloc: failed to reserver memory for mempool[%s]\n", memname)); ++ LWIP_DEBUGF(SYS_DEBUG | GAZELLE_DEBUG_SERIOUS, ("sys_hugepage_malloc: failed to reserver memory for mempool[%s], errno %d\n", memname, errno)); + set_errno(ENOMEM); + return NULL; ++ } else { ++ /* Ignore dpdk errno when mem allocation is successful */ ++ errno = 0; + } + + memset(mz->addr, 0, mz->len); +diff --git a/src/core/mem.c b/src/core/mem.c +index b5e50c0..78a1dd4 100644 +--- a/src/core/mem.c ++++ b/src/core/mem.c +@@ -518,8 +518,6 @@ mem_init(void) + #if GAZELLE_ENABLE + /* see LWIP_RAM_HEAP_POINTER */ + LWIP_MEMORY_INIT_VAR(LWIP_RAM_HEAP_POINTER, MEM_SIZE_ALIGNED + (2U * SIZEOF_STRUCT_MEM)); +- if (errno != 0) +- return; + #endif /* GAZELLE_ENABLE */ + + struct mem *mem; +diff --git a/src/core/memp.c b/src/core/memp.c +index 6c858be..01cf362 100644 +--- a/src/core/memp.c ++++ b/src/core/memp.c +@@ -228,11 +228,8 @@ void + memp_init(void) + { + #if GAZELLE_ENABLE +-#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_INIT_VAR(name,num,size,desc) ++#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_INIT_VAR(name,num,size,desc); + #include "lwip/priv/memp_std.h" +- +- if (errno != 0) +- return; + #endif /* GAZELLE_ENABLE */ + + u16_t i; +diff --git a/src/include/arch/cc.h b/src/include/arch/cc.h +index 8527b44..51f87bb 100644 +--- a/src/include/arch/cc.h ++++ b/src/include/arch/cc.h +@@ -46,8 +46,12 @@ + #define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) \ + static PER_THREAD u8_t *variable_name; + +-#define LWIP_MEMORY_INIT_VAR(name, size) \ +- name = sys_hugepage_malloc(#name, size); ++#define LWIP_MEMORY_INIT_VAR(name, size) do { \ ++ name = sys_hugepage_malloc(#name, size); \ ++ if (name == NULL) \ ++ return; \ ++} while(0) ++ + + #define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \ + LWIP_DECLARE_MEMORY_ALIGNED(memp_memory_ ## name ## _base, 0); \ +@@ -56,13 +60,16 @@ + \ + PER_THREAD struct memp_desc memp_ ## name; + +-#define LWIP_MEMPOOL_INIT_VAR(name,num,size,desc) \ ++#define LWIP_MEMPOOL_INIT_VAR(name,num,size,desc) do { \ + memp_memory_ ## name ## _base = sys_hugepage_malloc(#name, LWIP_MEM_ALIGN_BUFFER((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))); \ ++ if (memp_memory_ ## name ## _base == NULL) \ ++ return; \ + sys_mempool_var_init(&memp_ ## name, \ + desc, size, num, \ + memp_memory_ ## name ## _base, \ + &memp_tab_ ## name, \ + &memp_stat_ ## name); \ +- memp_pools[MEMP_ ## name] = &memp_ ## name; ++ memp_pools[MEMP_ ## name] = &memp_ ## name; \ ++} while(0) + + #endif /* _LWIP_ARCH_CC_H_ */ +-- +2.34.1 + diff --git a/lwip.spec b/lwip.spec index 14d5c71..42cf2e7 100644 --- a/lwip.spec +++ b/lwip.spec @@ -4,7 +4,7 @@ Summary: lwip is a small independent implementation of the TCP/IP protocol suite Name: lwip Version: 2.2.0 -Release: 50 +Release: 51 License: BSD URL: http://savannah.nongnu.org/projects/lwip/ Source0: http://download.savannah.nongnu.org/releases/lwip/%{name}-%{version}.zip @@ -171,6 +171,7 @@ Patch9155: 0156-cleancode-refactor-memp.patch Patch9156: 0157-cleancode-refactor-offload.patch Patch9157: 0158-enable-sys_arch-failed-log.patch Patch9158: 0159-LOOPBACK-fix-loop-coredump.patch +Patch9159: 0160-INIT-fix-lwip_init-failed-because-of-dpdk-set-errno.patch BuildRequires: gcc-c++ dos2unix dpdk-devel @@ -200,6 +201,9 @@ cd %{_builddir}/%{name}-%{version}/src %{_libdir}/liblwip.a %changelog +* Sat Aug 3 2024 yinbin - 2.2.0-51 +- INIT:fix lwip_init failed because of dpdk set errno + * Wed Jul 24 2024 yinbin - 2.2.0-50 - LOOPBACK: fix loop coredump