You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/05/21 06:28:48 UTC
[incubator-nuttx] 02/03: mm: Move backtrace stuff into a separate option
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/incubator-nuttx.git
commit b05320cac2a8519516ebb9576dc3d64ef1c2a6ad
Author: YAMAMOTO Takashi <ya...@midokura.com>
AuthorDate: Fri May 20 17:37:14 2022 +0900
mm: Move backtrace stuff into a separate option
The functionality has too much overhead for CONFIG_DEBUG_MM.
---
fs/procfs/fs_procfsmeminfo.c | 6 +++---
fs/procfs/fs_procfsproc.c | 6 +++---
include/nuttx/mm/mm.h | 4 ++--
mm/Kconfig | 7 ++++++-
mm/kmm_heap/kmm_mallinfo.c | 2 +-
mm/mm_heap/mm.h | 6 +++---
mm/mm_heap/mm_mallinfo.c | 4 ++--
mm/mm_heap/mm_memdump.c | 6 +++---
mm/umm_heap/umm_mallinfo.c | 2 +-
9 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/fs/procfs/fs_procfsmeminfo.c b/fs/procfs/fs_procfsmeminfo.c
index 50b3ac40c5..1a8c66b89b 100644
--- a/fs/procfs/fs_procfsmeminfo.c
+++ b/fs/procfs/fs_procfsmeminfo.c
@@ -415,7 +415,7 @@ static ssize_t memdump_read(FAR struct file *filep, FAR char *buffer,
procfile = (FAR struct meminfo_file_s *)filep->f_priv;
DEBUGASSERT(procfile);
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
linesize = procfs_snprintf(procfile->line, MEMINFO_LINELEN,
"usage: <pid/used/free/on/off>\n"
"on/off backtrace\n"
@@ -460,7 +460,7 @@ static ssize_t memdump_write(FAR struct file *filep, FAR const char *buffer,
procfile = filep->f_priv;
DEBUGASSERT(procfile);
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
if (strcmp(buffer, "on") == 0)
{
for (entry = g_procfs_meminfo; entry != NULL; entry = entry->next)
@@ -490,7 +490,7 @@ static ssize_t memdump_write(FAR struct file *filep, FAR const char *buffer,
case 'f':
pid = (pid_t)-2;
break;
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
default:
pid = atoi(buffer);
#endif
diff --git a/fs/procfs/fs_procfsproc.c b/fs/procfs/fs_procfsproc.c
index 66201ba80e..0d88d8e421 100644
--- a/fs/procfs/fs_procfsproc.c
+++ b/fs/procfs/fs_procfsproc.c
@@ -178,7 +178,7 @@ static ssize_t proc_critmon(FAR struct proc_file_s *procfile,
FAR struct tcb_s *tcb, FAR char *buffer, size_t buflen,
off_t offset);
#endif
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
static ssize_t proc_heap(FAR struct proc_file_s *procfile,
FAR struct tcb_s *tcb, FAR char *buffer,
size_t buflen, off_t offset);
@@ -904,7 +904,7 @@ static ssize_t proc_critmon(FAR struct proc_file_s *procfile,
* Name: proc_heap
****************************************************************************/
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
static ssize_t proc_heap(FAR struct proc_file_s *procfile,
FAR struct tcb_s *tcb, FAR char *buffer,
size_t buflen, off_t offset)
@@ -1575,7 +1575,7 @@ static ssize_t proc_read(FAR struct file *filep, FAR char *buffer,
ret = proc_critmon(procfile, tcb, buffer, buflen, filep->f_pos);
break;
#endif
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
case PROC_HEAP: /* Task heap info */
ret = proc_heap(procfile, tcb, buffer, buflen, filep->f_pos);
break;
diff --git a/include/nuttx/mm/mm.h b/include/nuttx/mm/mm.h
index 6f78a6a607..d7dc01175b 100644
--- a/include/nuttx/mm/mm.h
+++ b/include/nuttx/mm/mm.h
@@ -296,7 +296,7 @@ void kmm_extend(FAR void *mem, size_t size, int region);
struct mallinfo; /* Forward reference */
int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info);
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
struct mallinfo_task; /* Forward reference */
int mm_mallinfo_task(FAR struct mm_heap_s *heap,
FAR struct mallinfo_task *info);
@@ -306,7 +306,7 @@ int mm_mallinfo_task(FAR struct mm_heap_s *heap,
#ifdef CONFIG_MM_KERNEL_HEAP
struct mallinfo kmm_mallinfo(void);
-# ifdef CONFIG_DEBUG_MM
+# ifdef CONFIG_MM_BACKTRACE
struct mallinfo_task kmm_mallinfo_task(pid_t pid);
# endif
#endif
diff --git a/mm/Kconfig b/mm/Kconfig
index 269ea6609d..30e789da5b 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -186,10 +186,15 @@ config MM_KASAN
bugs in native code. After turn on this option, Please
add -fsanitize=kernel-address to CFLAGS/CXXFLAGS too.
+config MM_BACKTRACE
+ bool "Owner tracking and backtrace"
+ default n
+ depends on DEBUG_MM
+
config MM_BACKTRACE_DEFAULT
bool "Enable the backtrace record by default"
default n
- depends on DEBUG_MM
+ depends on MM_BACKTRACE
config MM_DUMP_ON_FAILURE
bool "Dump heap info on allocation failure"
diff --git a/mm/kmm_heap/kmm_mallinfo.c b/mm/kmm_heap/kmm_mallinfo.c
index 33dd6649c8..b28ad949fd 100644
--- a/mm/kmm_heap/kmm_mallinfo.c
+++ b/mm/kmm_heap/kmm_mallinfo.c
@@ -59,7 +59,7 @@ struct mallinfo kmm_mallinfo(void)
*
****************************************************************************/
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
struct mallinfo_task kmm_mallinfo_task(pid_t pid)
{
struct mallinfo_task info;
diff --git a/mm/mm_heap/mm.h b/mm/mm_heap/mm.h
index 9ea235ecd3..ba2e589af6 100644
--- a/mm/mm_heap/mm.h
+++ b/mm/mm_heap/mm.h
@@ -90,7 +90,7 @@
# define MM_MAX_SHIFT (22) /* 4 Mb */
#endif
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
# define MM_MIN_SHIFT (MM_MIN_SHIFT_ + 2)
# define MM_BACKTRACE_DEPTH 8
# define MM_ADD_BACKTRACE(heap, ptr) \
@@ -165,7 +165,7 @@ typedef uint32_t mmsize_t;
struct mm_allocnode_s
{
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
pid_t pid; /* The pid for caller */
FAR void *backtrace[MM_BACKTRACE_DEPTH]; /* The backtrace buffer for caller */
#endif
@@ -180,7 +180,7 @@ static_assert(SIZEOF_MM_ALLOCNODE <= MM_MIN_CHUNK,
struct mm_freenode_s
{
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
pid_t pid; /* The pid for caller */
FAR void *backtrace[MM_BACKTRACE_DEPTH]; /* The backtrace buffer for caller */
#endif
diff --git a/mm/mm_heap/mm_mallinfo.c b/mm/mm_heap/mm_mallinfo.c
index 7ecdc039e3..e8d128a176 100644
--- a/mm/mm_heap/mm_mallinfo.c
+++ b/mm/mm_heap/mm_mallinfo.c
@@ -75,7 +75,7 @@ static void mallinfo_handler(FAR struct mm_allocnode_s *node, FAR void *arg)
}
}
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
static void mallinfo_task_handler(FAR struct mm_allocnode_s *node,
FAR void *arg)
{
@@ -137,7 +137,7 @@ int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info)
*
****************************************************************************/
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
int mm_mallinfo_task(FAR struct mm_heap_s *heap,
FAR struct mallinfo_task *info)
{
diff --git a/mm/mm_heap/mm_memdump.c b/mm/mm_heap/mm_memdump.c
index cc99a8e71c..fe892fdf3b 100644
--- a/mm/mm_heap/mm_memdump.c
+++ b/mm/mm_heap/mm_memdump.c
@@ -65,13 +65,13 @@ static void memdump_handler(FAR struct mm_allocnode_s *node, FAR void *arg)
if ((node->preceding & MM_ALLOC_BIT) != 0)
{
DEBUGASSERT(node->size >= SIZEOF_MM_ALLOCNODE);
-#ifndef CONFIG_DEBUG_MM
+#ifndef CONFIG_MM_BACKTRACE
if (info->pid == -1)
#else
if (info->pid == -1 || node->pid == info->pid)
#endif
{
-#ifndef CONFIG_DEBUG_MM
+#ifndef CONFIG_MM_BACKTRACE
syslog(LOG_INFO, "%12zu%*p\n",
(size_t)node->size, MM_PTR_FMT_WIDTH,
((FAR char *)node + SIZEOF_MM_ALLOCNODE));
@@ -141,7 +141,7 @@ void mm_memdump(FAR struct mm_heap_s *heap, pid_t pid)
if (pid >= -1)
{
syslog(LOG_INFO, "Dump all used memory node info:\n");
-#ifndef CONFIG_DEBUG_MM
+#ifndef CONFIG_MM_BACKTRACE
syslog(LOG_INFO, "%12s%*s\n", "Size", MM_PTR_FMT_WIDTH, "Address");
#else
syslog(LOG_INFO, "%6s%12s%*s %s\n", "PID", "Size", MM_PTR_FMT_WIDTH,
diff --git a/mm/umm_heap/umm_mallinfo.c b/mm/umm_heap/umm_mallinfo.c
index e59cfa8eac..b79f543349 100644
--- a/mm/umm_heap/umm_mallinfo.c
+++ b/mm/umm_heap/umm_mallinfo.c
@@ -59,7 +59,7 @@ struct mallinfo mallinfo(void)
*
****************************************************************************/
-#ifdef CONFIG_DEBUG_MM
+#ifdef CONFIG_MM_BACKTRACE
struct mallinfo_task mallinfo_task(pid_t pid)
{
struct mallinfo_task info;