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
The following commit(s) were added to refs/heads/master by this push: new 13f0051747 mm: rewrite the memdump code for more readable 13f0051747 is described below commit 13f005174703f1ef41540ce4099520a0205c9484 Author: ligd <liguidi...@xiaomi.com> AuthorDate: Mon Sep 11 17:52:17 2023 +0800 mm: rewrite the memdump code for more readable Signed-off-by: ligd <liguidi...@xiaomi.com> --- include/nuttx/mm/mm.h | 6 ++++++ mm/mempool/mempool.c | 14 ++++++++------ mm/mm_heap/mm_mallinfo.c | 7 +++---- mm/mm_heap/mm_memdump.c | 28 ++++++++++++++++++---------- mm/tlsf/mm_tlsf.c | 42 ++++++++++++++++++++++++------------------ 5 files changed, 59 insertions(+), 38 deletions(-) diff --git a/include/nuttx/mm/mm.h b/include/nuttx/mm/mm.h index 01e7d7a284..265f92c986 100644 --- a/include/nuttx/mm/mm.h +++ b/include/nuttx/mm/mm.h @@ -133,6 +133,12 @@ # define MM_INTERNAL_HEAP(heap) ((heap) == USR_HEAP) #endif +#define MM_DUMP_ASSIGN(dump, pid) ((dump) == (pid)) +#define MM_DUMP_ALLOC(dump, pid) \ + ((dump) == PID_MM_ALLOC && (pid) != PID_MM_MEMPOOL) +#define MM_DUMP_LEAK(dump, pid) \ + ((dump) == PID_MM_LEAK && (pid) >= 0 && nxsched_get_tcb(pid) == NULL) + /**************************************************************************** * Public Types ****************************************************************************/ diff --git a/mm/mempool/mempool.c b/mm/mempool/mempool.c index 4d36da1db9..921cc476bc 100644 --- a/mm/mempool/mempool.c +++ b/mm/mempool/mempool.c @@ -434,11 +434,12 @@ mempool_info_task(FAR struct mempool_s *pool, { FAR struct mempool_backtrace_s *buf; - list_for_every_entry(&pool->alist, buf, struct mempool_backtrace_s, - node) + list_for_every_entry(&pool->alist, buf, + struct mempool_backtrace_s, node) { - if ((task->pid == buf->pid || task->pid == PID_MM_ALLOC || - (task->pid == PID_MM_LEAK && !nxsched_get_tcb(buf->pid))) && + if ((MM_DUMP_ASSIGN(task->pid, buf->pid) || + MM_DUMP_ALLOC(task->pid, buf->pid) || + MM_DUMP_LEAK(task->pid, buf->pid)) && buf->seqno >= task->seqmin && buf->seqno <= task->seqmax) { info.aordblks++; @@ -500,8 +501,9 @@ void mempool_memdump(FAR struct mempool_s *pool, list_for_every_entry(&pool->alist, buf, struct mempool_backtrace_s, node) { - if ((dump->pid == buf->pid || dump->pid == PID_MM_ALLOC || - (dump->pid == PID_MM_LEAK && !nxsched_get_tcb(buf->pid))) && + if ((MM_DUMP_ASSIGN(dump->pid, buf->pid) || + MM_DUMP_ALLOC(dump->pid, buf->pid) || + MM_DUMP_LEAK(dump->pid, buf->pid)) && buf->seqno >= dump->seqmin && buf->seqno <= dump->seqmax) { char tmp[CONFIG_MM_BACKTRACE * MM_PTR_FMT_WIDTH + 1] = ""; diff --git a/mm/mm_heap/mm_mallinfo.c b/mm/mm_heap/mm_mallinfo.c index 96678ebec2..84bc51718d 100644 --- a/mm/mm_heap/mm_mallinfo.c +++ b/mm/mm_heap/mm_mallinfo.c @@ -104,10 +104,9 @@ static void mallinfo_task_handler(FAR struct mm_allocnode_s *node, info->uordblks += nodesize; } #else - if ((task->pid == node->pid || - (task->pid == PID_MM_ALLOC && node->pid != PID_MM_MEMPOOL) || - (task->pid == PID_MM_LEAK && node->pid >= 0 && - !nxsched_get_tcb(node->pid))) && + if ((MM_DUMP_ASSIGN(task->pid, node->pid) || + MM_DUMP_ALLOC(task->pid, node->pid) || + MM_DUMP_LEAK(task->pid, node->pid)) && node->seqno >= task->seqmin && node->seqno <= task->seqmax) { info->aordblks++; diff --git a/mm/mm_heap/mm_memdump.c b/mm/mm_heap/mm_memdump.c index cd6fbed486..510a178574 100644 --- a/mm/mm_heap/mm_memdump.c +++ b/mm/mm_heap/mm_memdump.c @@ -60,21 +60,30 @@ static void memdump_handler(FAR struct mm_allocnode_s *node, FAR void *arg) DEBUGASSERT(nodesize >= MM_SIZEOF_ALLOCNODE); #if CONFIG_MM_BACKTRACE < 0 if (dump->pid == PID_MM_ALLOC) -#else - if ((dump->pid == node->pid || dump->pid == PID_MM_ALLOC || - (dump->pid == PID_MM_LEAK && node->pid >= 0 && - !nxsched_get_tcb(node->pid))) && - node->seqno >= dump->seqmin && node->seqno <= dump->seqmax) -#endif { -#if CONFIG_MM_BACKTRACE < 0 syslog(LOG_INFO, "%12zu%*p\n", nodesize, MM_PTR_FMT_WIDTH, ((FAR char *)node + MM_SIZEOF_ALLOCNODE)); + } +#elif CONFIG_MM_BACKTRACE == 0 + if ((MM_DUMP_ASSIGN(dump->pid, node->pid) || + MM_DUMP_ALLOC(dump->pid, node->pid) || + MM_DUMP_LEAK(dump->pid, node->pid)) && + node->seqno >= dump->seqmin && node->seqno <= dump->seqmax) + { + syslog(LOG_INFO, "%6d%12zu%12lu%*p\n", + node->pid, nodesize, node->seqno, + MM_PTR_FMT_WIDTH, + ((FAR char *)node + MM_SIZEOF_ALLOCNODE)); + } #else + if ((MM_DUMP_ASSIGN(dump->pid, node->pid) || + MM_DUMP_ALLOC(dump->pid, node->pid) || + MM_DUMP_LEAK(dump->pid, node->pid)) && + node->seqno >= dump->seqmin && node->seqno <= dump->seqmax) + { char buf[CONFIG_MM_BACKTRACE * MM_PTR_FMT_WIDTH + 1] = ""; -# if CONFIG_MM_BACKTRACE > 0 FAR const char *format = " %0*p"; int i; @@ -84,14 +93,13 @@ static void memdump_handler(FAR struct mm_allocnode_s *node, FAR void *arg) sizeof(buf) - i * MM_PTR_FMT_WIDTH, format, MM_PTR_FMT_WIDTH - 1, node->backtrace[i]); } -# endif syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n", node->pid, nodesize, node->seqno, MM_PTR_FMT_WIDTH, ((FAR char *)node + MM_SIZEOF_ALLOCNODE), buf); -#endif } +#endif } else if (dump->pid == PID_MM_FREE) { diff --git a/mm/tlsf/mm_tlsf.c b/mm/tlsf/mm_tlsf.c index 80579da18d..1333d4bcc8 100644 --- a/mm/tlsf/mm_tlsf.c +++ b/mm/tlsf/mm_tlsf.c @@ -297,10 +297,9 @@ static void mallinfo_task_handler(FAR void *ptr, size_t size, int used, FAR struct memdump_backtrace_s *buf = ptr + size - sizeof(struct memdump_backtrace_s); - if ((task->pid == buf->pid || - (task->pid == PID_MM_ALLOC && buf->pid != PID_MM_MEMPOOL) || - (task->pid == PID_MM_LEAK && buf->pid >= 0 && - !nxsched_get_tcb(buf->pid))) && + if ((MM_DUMP_ASSIGN(task->pid, buf->pid) || + MM_DUMP_ALLOC(task->pid, buf->pid) || + MM_DUMP_LEAK(task->pid, buf->pid)) && buf->seqno >= task->seqmin && buf->seqno <= task->seqmax) { info->aordblks++; @@ -407,23 +406,32 @@ static void memdump_handler(FAR void *ptr, size_t size, int used, { #if CONFIG_MM_BACKTRACE < 0 if (dump->pid == PID_MM_ALLOC) -#else + { + syslog(LOG_INFO, "%12zu%*p\n", size, MM_PTR_FMT_WIDTH, ptr); + } +#elif CONFIG_MM_BACKTRACE == 0 FAR struct memdump_backtrace_s *buf = ptr + size - sizeof(struct memdump_backtrace_s); - if ((dump->pid == buf->pid || - (dump->pid == PID_MM_ALLOC && buf->pid != PID_MM_MEMPOOL) || - (dump->pid == PID_MM_LEAK && buf->pid >= 0 && - !nxsched_get_tcb(buf->pid))) && + if ((MM_DUMP_ASSIGN(dump->pid, buf->pid) || + MM_DUMP_ALLOC(dump->pid, buf->pid) || + MM_DUMP_LEAK(dump->pid, buf->pid)) && buf->seqno >= dump->seqmin && buf->seqno <= dump->seqmax) -#endif { -#if CONFIG_MM_BACKTRACE < 0 - syslog(LOG_INFO, "%12zu%*p\n", size, MM_PTR_FMT_WIDTH, ptr); + syslog(LOG_INFO, "%6d%12zu%12lu%*p\n", + buf->pid, size, buf->seqno, MM_PTR_FMT_WIDTH, ptr); + } #else + FAR struct memdump_backtrace_s *buf = + ptr + size - sizeof(struct memdump_backtrace_s); + + if ((MM_DUMP_ASSIGN(dump->pid, buf->pid) || + MM_DUMP_ALLOC(dump->pid, buf->pid) || + MM_DUMP_LEAK(dump->pid, buf->pid)) && + buf->seqno >= dump->seqmin && buf->seqno <= dump->seqmax) + { char tmp[CONFIG_MM_BACKTRACE * MM_PTR_FMT_WIDTH + 1] = ""; -# if CONFIG_MM_BACKTRACE > 0 FAR const char *format = " %0*p"; int i; @@ -433,13 +441,11 @@ static void memdump_handler(FAR void *ptr, size_t size, int used, sizeof(tmp) - i * MM_PTR_FMT_WIDTH, format, MM_PTR_FMT_WIDTH - 1, buf->backtrace[i]); } -# endif - syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n", - buf->pid, size, buf->seqno, MM_PTR_FMT_WIDTH, - ptr, tmp); -#endif + syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n", + buf->pid, size, buf->seqno, MM_PTR_FMT_WIDTH, ptr, tmp); } +#endif } else if (dump->pid == PID_MM_FREE) {