Skip to content

Commit 92f26a9

Browse files
anjiahao1acassis
authored andcommitted
mm:use Kconfig to control sequence number to save memory
One memory block can save sizeof(size_t) size. Signed-off-by: anjiahao <[email protected]>
1 parent c21405d commit 92f26a9

File tree

9 files changed

+84
-19
lines changed

9 files changed

+84
-19
lines changed

fs/procfs/fs_procfsmeminfo.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,8 +462,10 @@ static ssize_t memdump_read(FAR struct file *filep, FAR char *buffer,
462462
#if CONFIG_MM_BACKTRACE >= 0
463463
"leak: dump all leaked node\n"
464464
"pid: dump pid allocated node\n"
465+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
465466
"The current sequence number %lu\n",
466467
g_mm_seqno
468+
# endif
467469
#endif
468470
);
469471

include/nuttx/mm/mempool.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ struct mempool_backtrace_s
122122
* if there is any out of bounds.
123123
*/
124124
pid_t pid;
125+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
125126
unsigned long seqno; /* The sequence of memory malloc */
127+
# endif
126128
# if CONFIG_MM_BACKTRACE > 0
127129
FAR void *backtrace[CONFIG_MM_BACKTRACE];
128130
# endif

include/nuttx/mm/mm.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,12 @@
142142
# define MM_DUMP_ALLOC(dump, node) \
143143
((node) != NULL && (dump)->pid == PID_MM_ALLOC && \
144144
(node)->pid != PID_MM_MEMPOOL)
145-
# define MM_DUMP_SEQNO(dump, node) \
145+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
146+
# define MM_DUMP_SEQNO(dump, node) \
146147
((node)->seqno >= (dump)->seqmin && (node)->seqno <= (dump)->seqmax)
148+
# else
149+
# define MM_DUMP_SEQNO(dump,node) (true)
150+
# endif
147151
# define MM_DUMP_ASSIGN(dump, node) \
148152
((node) != NULL && (dump)->pid == (node)->pid)
149153
# define MM_DUMP_LEAK(dump, node) \
@@ -166,6 +170,12 @@
166170
#define MM_ALLOC_MAGIC 0xaa
167171
#define MM_FREE_MAGIC 0x55
168172

173+
#ifdef CONFIG_MM_BACKTRACE_SEQNO
174+
# define MM_INCSEQNO(p) ((p)->seqno = g_mm_seqno++)
175+
#else
176+
# define MM_INCSEQNO(p)
177+
#endif
178+
169179
/****************************************************************************
170180
* Public Types
171181
****************************************************************************/
@@ -195,7 +205,7 @@ extern "C"
195205
#define EXTERN extern
196206
#endif
197207

198-
#if CONFIG_MM_BACKTRACE >= 0
208+
#ifdef CONFIG_MM_BACKTRACE_SEQNO
199209
extern unsigned long g_mm_seqno;
200210
#endif
201211

mm/Kconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ config MM_BACKTRACE_DEFAULT
138138
default n
139139
depends on MM_BACKTRACE > 0
140140

141+
config MM_BACKTRACE_SEQNO
142+
bool "Record sequence number in memory block"
143+
default y
144+
depends on MM_BACKTRACE >= 0
145+
141146
config MM_DUMP_ON_FAILURE
142147
bool "Dump heap info on allocation failure"
143148
default n

mm/mempool/mempool.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ static inline void mempool_add_backtrace(FAR struct mempool_s *pool,
107107
DEBUGASSERT(buf->magic == MEMPOOL_MAGIC_FREE);
108108
buf->magic = MEMPOOL_MAGIC_ALLOC;
109109
buf->pid = _SCHED_GETTID();
110-
buf->seqno = g_mm_seqno++;
110+
MM_INCSEQNO(buf);
111111
# if CONFIG_MM_BACKTRACE > 0
112112
if (pool->procfs.backtrace)
113113
{
@@ -209,8 +209,15 @@ static void mempool_memdump_callback(FAR struct mempool_s *pool,
209209
FAR const char *tmp = "";
210210
# endif
211211

212-
syslog(LOG_INFO, "%6d%12zu%9zu%12lu%*p %s\n",
213-
buf->pid, blocksize, overhead, buf->seqno,
212+
syslog(LOG_INFO, "%6d%12zu%9zu"
213+
#ifdef CONFIG_MM_BACKTRACE_SEQNO
214+
"%12lu"
215+
#endif
216+
"%*p %s\n",
217+
buf->pid, blocksize, overhead,
218+
#ifdef CONFIG_MM_BACKTRACE_SEQNO
219+
buf->seqno,
220+
#endif
214221
BACKTRACE_PTR_FMT_WIDTH,
215222
((FAR char *)buf - pool->blocksize), tmp);
216223
}

mm/mm_heap/mm.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
{ \
7979
FAR struct mm_allocnode_s *tmp = (FAR struct mm_allocnode_s *)(ptr); \
8080
tmp->pid = _SCHED_GETTID(); \
81-
tmp->seqno = g_mm_seqno++; \
81+
MM_INCSEQNO(tmp); \
8282
} \
8383
while (0)
8484
#elif CONFIG_MM_BACKTRACE > 0
@@ -102,7 +102,7 @@
102102
{ \
103103
tmp->backtrace[0] = NULL; \
104104
} \
105-
tmp->seqno = g_mm_seqno++; \
105+
MM_INCSEQNO(tmp); \
106106
} \
107107
while (0)
108108
#else
@@ -178,7 +178,9 @@ struct mm_allocnode_s
178178
mmsize_t size; /* Size of this chunk */
179179
#if CONFIG_MM_BACKTRACE >= 0
180180
pid_t pid; /* The pid for caller */
181+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
181182
unsigned long seqno; /* The sequence of memory malloc */
183+
# endif
182184
# if CONFIG_MM_BACKTRACE > 0
183185
FAR void *backtrace[CONFIG_MM_BACKTRACE]; /* The backtrace buffer for caller */
184186
# endif

mm/mm_heap/mm_memdump.c

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,15 @@ static void memdump_allocnode(FAR struct mm_allocnode_s *node)
6666
nodesize, overhead, BACKTRACE_PTR_FMT_WIDTH,
6767
(FAR const char *)node + MM_SIZEOF_ALLOCNODE);
6868
#elif CONFIG_MM_BACKTRACE == 0
69-
syslog(LOG_INFO, "%6d%12zu%9zu%12lu%*p\n",
70-
node->pid, nodesize, overhead, node->seqno,
69+
syslog(LOG_INFO, "%6d%12zu%9zu"
70+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
71+
"%12lu"
72+
# endif
73+
"%*p\n",
74+
node->pid, nodesize, overhead,
75+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
76+
node->seqno,
77+
# endif
7178
BACKTRACE_PTR_FMT_WIDTH,
7279
(FAR const char *)node + MM_SIZEOF_ALLOCNODE);
7380
#else
@@ -76,8 +83,15 @@ static void memdump_allocnode(FAR struct mm_allocnode_s *node)
7683
backtrace_format(buf, sizeof(buf), node->backtrace,
7784
CONFIG_MM_BACKTRACE);
7885

79-
syslog(LOG_INFO, "%6d%12zu%9zu%12lu%*p %s\n",
80-
node->pid, nodesize, overhead, node->seqno,
86+
syslog(LOG_INFO, "%6d%12zu%9zu"
87+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
88+
"%12lu%"
89+
# endif
90+
"*p %s\n",
91+
node->pid, nodesize, overhead,
92+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
93+
node->seqno,
94+
# endif
8195
BACKTRACE_PTR_FMT_WIDTH,
8296
(FAR const char *)node + MM_SIZEOF_ALLOCNODE, buf);
8397
#endif
@@ -293,8 +307,15 @@ void mm_memdump(FAR struct mm_heap_s *heap,
293307
BACKTRACE_PTR_FMT_WIDTH,
294308
"Address");
295309
#else
296-
syslog(LOG_INFO, "%6s%12s%9s%12s%*s %s\n", "PID", "Size", "Overhead",
297-
"Sequence", BACKTRACE_PTR_FMT_WIDTH,
310+
syslog(LOG_INFO, "%6s%12s%9s"
311+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
312+
"%12s"
313+
# endif
314+
"%*s %s\n", "PID", "Size", "Overhead",
315+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
316+
"Sequence",
317+
# endif
318+
BACKTRACE_PTR_FMT_WIDTH,
298319
"Address", "Backtrace");
299320
#endif
300321

mm/tlsf/mm_tlsf.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,16 @@ static void memdump_allocnode(FAR void *ptr, size_t size)
218218
FAR struct memdump_backtrace_s *buf =
219219
ptr + size - sizeof(struct memdump_backtrace_s);
220220

221-
syslog(LOG_INFO, "%6d%12zu%12lu%*p\n",
222-
buf->pid, size, buf->seqno, BACKTRACE_PTR_FMT_WIDTH, ptr);
221+
syslog(LOG_INFO, "%6d%12zu"
222+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
223+
"%12lu"
224+
# endif
225+
"%*p\n",
226+
buf->pid, size,
227+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
228+
buf->seqno,
229+
# endif
230+
BACKTRACE_PTR_FMT_WIDTH, ptr);
223231
#else
224232
char tmp[BACKTRACE_BUFFER_SIZE(CONFIG_MM_BACKTRACE)];
225233
FAR struct memdump_backtrace_s *buf =
@@ -228,8 +236,16 @@ static void memdump_allocnode(FAR void *ptr, size_t size)
228236
backtrace_format(tmp, sizeof(tmp), buf->backtrace,
229237
CONFIG_MM_BACKTRACE);
230238

231-
syslog(LOG_INFO, "%6d%12zu%12lu%*p %s\n",
232-
buf->pid, size, buf->seqno, BACKTRACE_PTR_FMT_WIDTH,
239+
syslog(LOG_INFO, "%6d%12zu"
240+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
241+
"%12lu"
242+
# endif
243+
"%*p %s\n",
244+
buf->pid, size,
245+
# ifdef CONFIG_MM_BACKTRACE_SEQNO
246+
buf->seqno,
247+
# endif
248+
BACKTRACE_PTR_FMT_WIDTH,
233249
ptr, tmp);
234250
#endif
235251
}
@@ -299,7 +315,7 @@ static void memdump_backtrace(FAR struct mm_heap_s *heap,
299315
# endif
300316

301317
buf->pid = _SCHED_GETTID();
302-
buf->seqno = g_mm_seqno++;
318+
MM_INCSEQNO(buf);
303319
# if CONFIG_MM_BACKTRACE > 0
304320
tcb = nxsched_get_tcb(buf->pid);
305321
if (heap->mm_procfs.backtrace ||

mm/umm_heap/umm_memdump.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
* Public data
3434
****************************************************************************/
3535

36-
#if CONFIG_MM_BACKTRACE >= 0
36+
#ifdef CONFIG_MM_BACKTRACE_SEQNO
3737
unsigned long g_mm_seqno;
3838
#endif
3939

0 commit comments

Comments
 (0)