You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2021/07/04 21:53:56 UTC
[incubator-nuttx] 04/05: arch/sim: Implement mm_mallinfo for the
custom heap
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 4589c369becbd0e7ab9ade912745a932b8e322c2
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Sun Jun 27 04:57:54 2021 +0800
arch/sim: Implement mm_mallinfo for the custom heap
Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
arch/sim/src/sim/up_heap.c | 1 +
arch/sim/src/sim/up_hostmemory.c | 54 +++++++++++++++++++++++++++++++++++++++-
arch/sim/src/sim/up_internal.h | 1 +
3 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/arch/sim/src/sim/up_heap.c b/arch/sim/src/sim/up_heap.c
index b1ccc11..cd61de4 100644
--- a/arch/sim/src/sim/up_heap.c
+++ b/arch/sim/src/sim/up_heap.c
@@ -427,6 +427,7 @@ void mm_extend(FAR struct mm_heap_s *heap, FAR void *mem, size_t size,
int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info)
{
memset(info, 0, sizeof(struct mallinfo));
+ host_mallinfo(&info->aordblks, &info->uordblks);
return 0;
}
diff --git a/arch/sim/src/sim/up_hostmemory.c b/arch/sim/src/sim/up_hostmemory.c
index f444011..07cad25 100644
--- a/arch/sim/src/sim/up_hostmemory.c
+++ b/arch/sim/src/sim/up_hostmemory.c
@@ -27,6 +27,7 @@
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
+#include <stdatomic.h>
#include <sys/mman.h>
#include <sys/stat.h>
@@ -40,6 +41,13 @@
#include "up_internal.h"
/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static atomic_int g_aordblks;
+static atomic_int g_uordblks;
+
+/****************************************************************************
* Public Functions
****************************************************************************/
@@ -144,15 +152,59 @@ void *host_memalign(size_t alignment, size_t size)
return NULL;
}
+ size = host_malloc_size(p);
+ g_aordblks += 1;
+ g_uordblks += size;
+
return p;
}
void host_free(void *mem)
{
+ size_t size;
+
+ if (mem == NULL)
+ {
+ return;
+ }
+
+ size = host_malloc_size(mem);
+ g_aordblks -= 1;
+ g_uordblks -= size;
free(mem);
}
void *host_realloc(void *oldmem, size_t size)
{
- return realloc(oldmem, size);
+ size_t oldsize;
+ void *mem;
+
+ if (size == 0)
+ {
+ host_free(oldmem);
+ return NULL;
+ }
+ else if (oldmem == NULL)
+ {
+ return host_memalign(sizeof(void *), size);
+ }
+
+ oldsize = host_malloc_size(oldmem);
+ mem = realloc(oldmem, size);
+ if (mem == NULL)
+ {
+ return NULL;
+ }
+
+ size = host_malloc_size(mem);
+ g_uordblks -= oldsize;
+ g_uordblks += size;
+
+ return mem;
+}
+
+void host_mallinfo(int *aordblks, int *uordblks)
+{
+ *aordblks = g_aordblks;
+ *uordblks = g_uordblks;
}
diff --git a/arch/sim/src/sim/up_internal.h b/arch/sim/src/sim/up_internal.h
index 43c8913..307d7aa 100644
--- a/arch/sim/src/sim/up_internal.h
+++ b/arch/sim/src/sim/up_internal.h
@@ -148,6 +148,7 @@ size_t host_malloc_size(void *mem);
void *host_memalign(size_t alignment, size_t size);
void host_free(void *mem);
void *host_realloc(void *oldmem, size_t size);
+void host_mallinfo(int *aordblks, int *uordblks);
/* up_hosttime.c ************************************************************/