1195972f6Sopenharmony_ciFrom cbeb07ef6238a719a2bb84837835ebc228ac4fde Mon Sep 17 00:00:00 2001 2195972f6Sopenharmony_ciFrom: jiangheng <jiangheng14@huawei.com> 3195972f6Sopenharmony_ciDate: Tue, 20 Jun 2023 14:56:28 +0800 4195972f6Sopenharmony_ciSubject: [PATCH] add error check in hugepage_init and sys_mbox_free 5195972f6Sopenharmony_ci 6195972f6Sopenharmony_ci--- 7195972f6Sopenharmony_ci src/api/sys_arch.c | 8 ++++++-- 8195972f6Sopenharmony_ci src/include/memp_def.h | 13 ++++++++++++- 9195972f6Sopenharmony_ci 2 files changed, 18 insertions(+), 3 deletions(-) 10195972f6Sopenharmony_ci 11195972f6Sopenharmony_cidiff --git a/src/api/sys_arch.c b/src/api/sys_arch.c 12195972f6Sopenharmony_ciindex f93a00e..1bc3aee 100644 13195972f6Sopenharmony_ci--- a/src/api/sys_arch.c 14195972f6Sopenharmony_ci+++ b/src/api/sys_arch.c 15195972f6Sopenharmony_ci@@ -124,8 +124,12 @@ err_t sys_mbox_new(struct sys_mbox **mb, int size) 16195972f6Sopenharmony_ci void sys_mbox_free(struct sys_mbox **mb) 17195972f6Sopenharmony_ci { 18195972f6Sopenharmony_ci struct sys_mbox *mbox = *mb; 19195972f6Sopenharmony_ci- rte_ring_free(mbox->ring); 20195972f6Sopenharmony_ci+ if (mbox->ring != NULL) { 21195972f6Sopenharmony_ci+ rte_ring_free(mbox->ring); 22195972f6Sopenharmony_ci+ mbox->ring = NULL; 23195972f6Sopenharmony_ci+ } 24195972f6Sopenharmony_ci memp_free(MEMP_SYS_MBOX, mbox); 25195972f6Sopenharmony_ci+ sys_mbox_set_invalid(mb); 26195972f6Sopenharmony_ci } 27195972f6Sopenharmony_ci 28195972f6Sopenharmony_ci err_t sys_mbox_trypost(struct sys_mbox **mb, void *msg) 29195972f6Sopenharmony_ci@@ -371,7 +375,7 @@ uint8_t *sys_hugepage_malloc(const char *name, uint32_t size) 30195972f6Sopenharmony_ci 31195972f6Sopenharmony_ci mz = rte_memzone_reserve(name, size, rte_socket_id(), 0); 32195972f6Sopenharmony_ci if (mz == NULL) { 33195972f6Sopenharmony_ci- rte_exit(EXIT_FAILURE, "failed to reserver memory for mempool[%s]\n", name); 34195972f6Sopenharmony_ci+ LWIP_DEBUGF(SYS_DEBUG, ("sys_hugepage_malloc: failed to reserve memory for mempool\n")); 35195972f6Sopenharmony_ci return NULL; 36195972f6Sopenharmony_ci } 37195972f6Sopenharmony_ci 38195972f6Sopenharmony_cidiff --git a/src/include/memp_def.h b/src/include/memp_def.h 39195972f6Sopenharmony_ciindex 082f685..3408c60 100644 40195972f6Sopenharmony_ci--- a/src/include/memp_def.h 41195972f6Sopenharmony_ci+++ b/src/include/memp_def.h 42195972f6Sopenharmony_ci@@ -52,15 +52,26 @@ 43195972f6Sopenharmony_ci #include <lwip/priv/memp_std.h> 44195972f6Sopenharmony_ci #undef LWIP_MEMPOOL 45195972f6Sopenharmony_ci 46195972f6Sopenharmony_ci-static inline void hugepage_init(void) 47195972f6Sopenharmony_ci+extern PER_THREAD uint8_t *ram_heap; 48195972f6Sopenharmony_ci+static inline int hugepage_init(void) 49195972f6Sopenharmony_ci { 50195972f6Sopenharmony_ci #define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_BASE_INIT(name) 51195972f6Sopenharmony_ci #include "lwip/priv/memp_std.h" 52195972f6Sopenharmony_ci+ u16_t i; 53195972f6Sopenharmony_ci+ for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) { 54195972f6Sopenharmony_ci+ if (memp_pools[i]->base == NULL) { 55195972f6Sopenharmony_ci+ return -1; 56195972f6Sopenharmony_ci+ } 57195972f6Sopenharmony_ci+ } 58195972f6Sopenharmony_ci 59195972f6Sopenharmony_ci #if !MEM_LIBC_MALLOC 60195972f6Sopenharmony_ci LWIP_MEM_MEMORY_DECLARE(ram_heap) 61195972f6Sopenharmony_ci LWIP_MEM_MEMORY_INIT(ram_heap) 62195972f6Sopenharmony_ci+ if (ram_heap == NULL) { 63195972f6Sopenharmony_ci+ return -1; 64195972f6Sopenharmony_ci+ } 65195972f6Sopenharmony_ci #endif /* MEM_LIBC_MALLOC */ 66195972f6Sopenharmony_ci+ return 0; 67195972f6Sopenharmony_ci } 68195972f6Sopenharmony_ci 69195972f6Sopenharmony_ci #endif /* __MEMP_DEF_H__ */ 70195972f6Sopenharmony_ci-- 71195972f6Sopenharmony_ci2.27.0 72195972f6Sopenharmony_ci 73