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