diff --git a/include/nuttx/mm/mm.h b/include/nuttx/mm/mm.h index 01e7d7a2841..265f92c9867 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 4d36da1db93..921cc476bc4 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 96678ebec2b..84bc51718d1 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 cd6fbed4869..510a1785746 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 80579da18db..1333d4bcc83 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) + { + 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 ((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) + { + 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 ((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); -#else 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) {