You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2023/10/25 17:53:46 UTC
[nuttx] 01/06: arch/sim: Simplify the implementation of textheap by reuse the heap manager
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 861220f6491bd9518f72600992376666ac52d8b7
Author: dongjiuzhu1 <do...@xiaomi.com>
AuthorDate: Fri Oct 13 22:16:57 2023 +0800
arch/sim: Simplify the implementation of textheap by reuse the heap manager
Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
arch/sim/src/sim/sim_textheap.c | 90 +++++------------------------------------
1 file changed, 9 insertions(+), 81 deletions(-)
diff --git a/arch/sim/src/sim/sim_textheap.c b/arch/sim/src/sim/sim_textheap.c
index ef0a29ac01..bc967cdfc8 100644
--- a/arch/sim/src/sim/sim_textheap.c
+++ b/arch/sim/src/sim/sim_textheap.c
@@ -23,8 +23,7 @@
****************************************************************************/
#include <nuttx/arch.h>
-#include <nuttx/queue.h>
-#include <nuttx/kmalloc.h>
+#include <nuttx/mm/mm.h>
#include "sim_internal.h"
@@ -32,16 +31,7 @@
* Private Data
****************************************************************************/
-/* Record memory allocated for text sections by sq_queue_t */
-
-struct textheap_s
-{
- sq_entry_t entry;
- void *p;
- size_t size;
-};
-
-static sq_queue_t g_textheap_list;
+static struct mm_heap_s *g_textheap;
/****************************************************************************
* Public Functions
@@ -57,40 +47,13 @@ static sq_queue_t g_textheap_list;
void *up_textheap_memalign(size_t align, size_t size)
{
- struct textheap_s *node;
- void *p;
- irqstate_t flags;
-
- /* host_allocheap (mmap) returns memory aligned to the page size, which
- * is always a multiple of the alignment (4/8) for text section. So, we
- * don't need to do anything here.
- */
-
- p = host_allocheap(size);
-
- flags = up_irq_save();
-
- if (p)
+ if (g_textheap == NULL)
{
- node = kmm_malloc(sizeof(*node));
-
- if (node)
- {
- node->p = p;
- node->size = size;
-
- sq_addlast(&node->entry, &g_textheap_list);
- }
- else
- {
- host_freeheap(p);
- p = NULL;
- }
+ g_textheap = mm_initialize("textheap", host_allocheap(SIM_HEAP_SIZE),
+ SIM_HEAP_SIZE);
}
- up_irq_restore(flags);
-
- return p;
+ return mm_memalign(g_textheap, align, size);
}
/****************************************************************************
@@ -103,26 +66,10 @@ void *up_textheap_memalign(size_t align, size_t size)
void up_textheap_free(void *p)
{
- sq_entry_t *node;
- struct textheap_s *entry;
- irqstate_t flags = up_irq_save();
-
- for (node = sq_peek(&g_textheap_list);
- node != NULL;
- node = sq_next(node))
+ if (g_textheap != NULL)
{
- entry = (struct textheap_s *)node;
-
- if (entry->p == p)
- {
- sq_rem(node, &g_textheap_list);
- host_freeheap(p);
- kmm_free(entry);
- break;
- }
+ mm_free(g_textheap, p);
}
-
- up_irq_restore(flags);
}
/****************************************************************************
@@ -135,24 +82,5 @@ void up_textheap_free(void *p)
bool up_textheap_heapmember(void *p)
{
- bool ret = false;
- sq_entry_t *node;
- struct textheap_s *entry;
- irqstate_t flags = up_irq_save();
-
- for (node = sq_peek(&g_textheap_list);
- node != NULL;
- node = sq_next(node))
- {
- entry = (struct textheap_s *)node;
-
- if (entry->p == p)
- {
- ret = true;
- break;
- }
- }
-
- up_irq_restore(flags);
- return ret;
+ return g_textheap != NULL && mm_heapmember(g_textheap, p);
}