加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0160-INIT-fix-lwip_init-failed-because-of-dpdk-set-errno.patch 3.73 KB
一键复制 编辑 原始数据 按行查看 历史
From 70a390384a97bca7048ec98eabd363e4fdf60bcc Mon Sep 17 00:00:00 2001
From: yinbin <yinbin8@huawei.com>
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
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化