Skip to content

Commit 13f0051

Browse files
GUIDINGLIxiaoxiang781216
authored andcommitted
mm: rewrite the memdump code for more readable
Signed-off-by: ligd <liguiding1@xiaomi.com>
1 parent dcb8188 commit 13f0051

File tree

5 files changed

+59
-38
lines changed

5 files changed

+59
-38
lines changed

include/nuttx/mm/mm.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@
133133
# define MM_INTERNAL_HEAP(heap) ((heap) == USR_HEAP)
134134
#endif
135135

136+
#define MM_DUMP_ASSIGN(dump, pid) ((dump) == (pid))
137+
#define MM_DUMP_ALLOC(dump, pid) \
138+
((dump) == PID_MM_ALLOC && (pid) != PID_MM_MEMPOOL)
139+
#define MM_DUMP_LEAK(dump, pid) \
140+
((dump) == PID_MM_LEAK && (pid) >= 0 && nxsched_get_tcb(pid) == NULL)
141+
136142
/****************************************************************************
137143
* Public Types
138144
****************************************************************************/

mm/mempool/mempool.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -434,11 +434,12 @@ mempool_info_task(FAR struct mempool_s *pool,
434434
{
435435
FAR struct mempool_backtrace_s *buf;
436436

437-
list_for_every_entry(&pool->alist, buf, struct mempool_backtrace_s,
438-
node)
437+
list_for_every_entry(&pool->alist, buf,
438+
struct mempool_backtrace_s, node)
439439
{
440-
if ((task->pid == buf->pid || task->pid == PID_MM_ALLOC ||
441-
(task->pid == PID_MM_LEAK && !nxsched_get_tcb(buf->pid))) &&
440+
if ((MM_DUMP_ASSIGN(task->pid, buf->pid) ||
441+
MM_DUMP_ALLOC(task->pid, buf->pid) ||
442+
MM_DUMP_LEAK(task->pid, buf->pid)) &&
442443
buf->seqno >= task->seqmin && buf->seqno <= task->seqmax)
443444
{
444445
info.aordblks++;
@@ -500,8 +501,9 @@ void mempool_memdump(FAR struct mempool_s *pool,
500501
list_for_every_entry(&pool->alist, buf,
501502
struct mempool_backtrace_s, node)
502503
{
503-
if ((dump->pid == buf->pid || dump->pid == PID_MM_ALLOC ||
504-
(dump->pid == PID_MM_LEAK && !nxsched_get_tcb(buf->pid))) &&
504+
if ((MM_DUMP_ASSIGN(dump->pid, buf->pid) ||
505+
MM_DUMP_ALLOC(dump->pid, buf->pid) ||
506+
MM_DUMP_LEAK(dump->pid, buf->pid)) &&
505507
buf->seqno >= dump->seqmin && buf->seqno <= dump->seqmax)
506508
{
507509
char tmp[CONFIG_MM_BACKTRACE * MM_PTR_FMT_WIDTH + 1] = "";

mm/mm_heap/mm_mallinfo.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,9 @@ static void mallinfo_task_handler(FAR struct mm_allocnode_s *node,
104104
info->uordblks += nodesize;
105105
}
106106
#else
107-
if ((task->pid == node->pid ||
108-
(task->pid == PID_MM_ALLOC && node->pid != PID_MM_MEMPOOL) ||
109-
(task->pid == PID_MM_LEAK && node->pid >= 0 &&
110-
!nxsched_get_tcb(node->pid))) &&
107+
if ((MM_DUMP_ASSIGN(task->pid, node->pid) ||
108+
MM_DUMP_ALLOC(task->pid, node->pid) ||
109+
MM_DUMP_LEAK(task->pid, node->pid)) &&
111110
node->seqno >= task->seqmin && node->seqno <= task->seqmax)
112111
{
113112
info->aordblks++;

mm/mm_heap/mm_memdump.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,30 @@ static void memdump_handler(FAR struct mm_allocnode_s *node, FAR void *arg)
6060
DEBUGASSERT(nodesize >= MM_SIZEOF_ALLOCNODE);
6161
#if CONFIG_MM_BACKTRACE < 0
6262
if (dump->pid == PID_MM_ALLOC)
63-
#else
64-
if ((dump->pid == node->pid || dump->pid == PID_MM_ALLOC ||
65-
(dump->pid == PID_MM_LEAK && node->pid >= 0 &&
66-
!nxsched_get_tcb(node->pid))) &&
67-
node->seqno >= dump->seqmin && node->seqno <= dump->seqmax)
68-
#endif
6963
{
70-
#if CONFIG_MM_BACKTRACE < 0
7164
syslog(LOG_INFO, "%12zu%*p\n",
7265
nodesize, MM_PTR_FMT_WIDTH,
7366
((FAR char *)node + MM_SIZEOF_ALLOCNODE));
67+
}
68+
#elif CONFIG_MM_BACKTRACE == 0
69+
if ((MM_DUMP_ASSIGN(dump->pid, node->pid) ||
70+
MM_DUMP_ALLOC(dump->pid, node->pid) ||
71+
MM_DUMP_LEAK(dump->pid, node->pid)) &&
72+
node->seqno >= dump->seqmin && node->seqno <= dump->seqmax)
73+
{
74+
syslog(LOG_INFO, "%6d%12zu%12lu%*p\n",
75+
node->pid, nodesize, node->seqno,
76+
MM_PTR_FMT_WIDTH,
77+
((FAR char *)node + MM_SIZEOF_ALLOCNODE));
78+
}
7479
#else
80+
if ((MM_DUMP_ASSIGN(dump->pid, node->pid) ||
81+
MM_DUMP_ALLOC(dump->pid, node->pid) ||
82+
MM_DUMP_LEAK(dump->pid, node->pid)) &&
83+
node->seqno >= dump->seqmin && node->seqno <= dump->seqmax)
84+
{
7585
char buf[CONFIG_MM_BACKTRACE * MM_PTR_FMT_WIDTH + 1] = "";
7686

77-
# if CONFIG_MM_BACKTRACE > 0
7887
FAR const char *format = " %0*p";
7988
int i;
8089

@@ -84,14 +93,13 @@ static void memdump_handler(FAR struct mm_allocnode_s *node, FAR void *arg)
8493
sizeof(buf) - i * MM_PTR_FMT_WIDTH,
8594
format, MM_PTR_FMT_WIDTH - 1, node->backtrace[i]);
8695
}
87-
# endif
8896

8997
syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n",
9098
node->pid, nodesize, node->seqno,
9199
MM_PTR_FMT_WIDTH,
92100
((FAR char *)node + MM_SIZEOF_ALLOCNODE), buf);
93-
#endif
94101
}
102+
#endif
95103
}
96104
else if (dump->pid == PID_MM_FREE)
97105
{

mm/tlsf/mm_tlsf.c

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -297,10 +297,9 @@ static void mallinfo_task_handler(FAR void *ptr, size_t size, int used,
297297
FAR struct memdump_backtrace_s *buf =
298298
ptr + size - sizeof(struct memdump_backtrace_s);
299299

300-
if ((task->pid == buf->pid ||
301-
(task->pid == PID_MM_ALLOC && buf->pid != PID_MM_MEMPOOL) ||
302-
(task->pid == PID_MM_LEAK && buf->pid >= 0 &&
303-
!nxsched_get_tcb(buf->pid))) &&
300+
if ((MM_DUMP_ASSIGN(task->pid, buf->pid) ||
301+
MM_DUMP_ALLOC(task->pid, buf->pid) ||
302+
MM_DUMP_LEAK(task->pid, buf->pid)) &&
304303
buf->seqno >= task->seqmin && buf->seqno <= task->seqmax)
305304
{
306305
info->aordblks++;
@@ -407,23 +406,32 @@ static void memdump_handler(FAR void *ptr, size_t size, int used,
407406
{
408407
#if CONFIG_MM_BACKTRACE < 0
409408
if (dump->pid == PID_MM_ALLOC)
410-
#else
409+
{
410+
syslog(LOG_INFO, "%12zu%*p\n", size, MM_PTR_FMT_WIDTH, ptr);
411+
}
412+
#elif CONFIG_MM_BACKTRACE == 0
411413
FAR struct memdump_backtrace_s *buf =
412414
ptr + size - sizeof(struct memdump_backtrace_s);
413415

414-
if ((dump->pid == buf->pid ||
415-
(dump->pid == PID_MM_ALLOC && buf->pid != PID_MM_MEMPOOL) ||
416-
(dump->pid == PID_MM_LEAK && buf->pid >= 0 &&
417-
!nxsched_get_tcb(buf->pid))) &&
416+
if ((MM_DUMP_ASSIGN(dump->pid, buf->pid) ||
417+
MM_DUMP_ALLOC(dump->pid, buf->pid) ||
418+
MM_DUMP_LEAK(dump->pid, buf->pid)) &&
418419
buf->seqno >= dump->seqmin && buf->seqno <= dump->seqmax)
419-
#endif
420420
{
421-
#if CONFIG_MM_BACKTRACE < 0
422-
syslog(LOG_INFO, "%12zu%*p\n", size, MM_PTR_FMT_WIDTH, ptr);
421+
syslog(LOG_INFO, "%6d%12zu%12lu%*p\n",
422+
buf->pid, size, buf->seqno, MM_PTR_FMT_WIDTH, ptr);
423+
}
423424
#else
425+
FAR struct memdump_backtrace_s *buf =
426+
ptr + size - sizeof(struct memdump_backtrace_s);
427+
428+
if ((MM_DUMP_ASSIGN(dump->pid, buf->pid) ||
429+
MM_DUMP_ALLOC(dump->pid, buf->pid) ||
430+
MM_DUMP_LEAK(dump->pid, buf->pid)) &&
431+
buf->seqno >= dump->seqmin && buf->seqno <= dump->seqmax)
432+
{
424433
char tmp[CONFIG_MM_BACKTRACE * MM_PTR_FMT_WIDTH + 1] = "";
425434

426-
# if CONFIG_MM_BACKTRACE > 0
427435
FAR const char *format = " %0*p";
428436
int i;
429437

@@ -433,13 +441,11 @@ static void memdump_handler(FAR void *ptr, size_t size, int used,
433441
sizeof(tmp) - i * MM_PTR_FMT_WIDTH,
434442
format, MM_PTR_FMT_WIDTH - 1, buf->backtrace[i]);
435443
}
436-
# endif
437444

438-
syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n",
439-
buf->pid, size, buf->seqno, MM_PTR_FMT_WIDTH,
440-
ptr, tmp);
441-
#endif
445+
syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n",
446+
buf->pid, size, buf->seqno, MM_PTR_FMT_WIDTH, ptr, tmp);
442447
}
448+
#endif
443449
}
444450
else if (dump->pid == PID_MM_FREE)
445451
{

0 commit comments

Comments
 (0)