This is an automated email from the ASF dual-hosted git repository. masayuki pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 53c6789bef mm: Add mm_uninitialize to release the resource 53c6789bef is described below commit 53c6789bef5951525acc81464e9d97d2436717ee Author: Xiang Xiao <xiaoxi...@xiaomi.com> AuthorDate: Fri Jun 10 09:47:41 2022 +0800 mm: Add mm_uninitialize to release the resource Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com> --- fs/procfs/fs_procfsmeminfo.c | 24 ++++++++++++++++++++++++ include/nuttx/fs/procfs.h | 13 +++++++++++++ include/nuttx/mm/mm.h | 1 + mm/mm_heap/mm.h | 1 + mm/mm_heap/mm_initialize.c | 36 ++++++++++++++++++++++++++++++------ mm/mm_heap/mm_sem.c | 15 +++++++++++++++ 6 files changed, 84 insertions(+), 6 deletions(-) diff --git a/fs/procfs/fs_procfsmeminfo.c b/fs/procfs/fs_procfsmeminfo.c index 1a8c66b89b..59a1803080 100644 --- a/fs/procfs/fs_procfsmeminfo.c +++ b/fs/procfs/fs_procfsmeminfo.c @@ -582,4 +582,28 @@ void procfs_register_meminfo(FAR struct procfs_meminfo_entry_s *entry) g_procfs_meminfo = entry; } +/**************************************************************************** + * Name: procfs_unregister_meminfo + * + * Description: + * Remove a meminfo entry from the procfs file system. + * + * Input Parameters: + * entry - Describes the entry to be unregistered. + * + ****************************************************************************/ + +void procfs_unregister_meminfo(FAR struct procfs_meminfo_entry_s *entry) +{ + FAR struct procfs_meminfo_entry_s **cur; + + for (cur = &g_procfs_meminfo; *cur != NULL; cur = &(*cur)->next) + { + if (*cur == entry) + { + *cur = entry->next; + break; + } + } +} #endif /* !CONFIG_FS_PROCFS_EXCLUDE_MEMINFO */ diff --git a/include/nuttx/fs/procfs.h b/include/nuttx/fs/procfs.h index 97bd245f08..8d7d840e7d 100644 --- a/include/nuttx/fs/procfs.h +++ b/include/nuttx/fs/procfs.h @@ -256,6 +256,19 @@ int procfs_register(FAR const struct procfs_entry_s *entry); void procfs_register_meminfo(FAR struct procfs_meminfo_entry_s *entry); +/**************************************************************************** + * Name: procfs_unregister_meminfo + * + * Description: + * Remove a meminfo entry from the procfs file system. + * + * Input Parameters: + * entry - Describes the entry to be unregistered. + * + ****************************************************************************/ + +void procfs_unregister_meminfo(FAR struct procfs_meminfo_entry_s *entry); + #undef EXTERN #ifdef __cplusplus } diff --git a/include/nuttx/mm/mm.h b/include/nuttx/mm/mm.h index d7dc01175b..2024ea8830 100644 --- a/include/nuttx/mm/mm.h +++ b/include/nuttx/mm/mm.h @@ -156,6 +156,7 @@ FAR struct mm_heap_s *mm_initialize(FAR const char *name, FAR void *heap_start, size_t heap_size); void mm_addregion(FAR struct mm_heap_s *heap, FAR void *heapstart, size_t heapsize); +void mm_uninitialize(FAR struct mm_heap_s *heap); /* Functions contained in umm_initialize.c **********************************/ diff --git a/mm/mm_heap/mm.h b/mm/mm_heap/mm.h index ba2e589af6..8360069efe 100644 --- a/mm/mm_heap/mm.h +++ b/mm/mm_heap/mm.h @@ -251,6 +251,7 @@ typedef CODE void (*mmchunk_handler_t)(FAR struct mm_allocnode_s *node, /* Functions contained in mm_sem.c ******************************************/ void mm_seminitialize(FAR struct mm_heap_s *heap); +void mm_semuninitialize(FAR struct mm_heap_s *heap); bool mm_takesemaphore(FAR struct mm_heap_s *heap); void mm_givesemaphore(FAR struct mm_heap_s *heap); diff --git a/mm/mm_heap/mm_initialize.c b/mm/mm_heap/mm_initialize.c index 69d81732e4..4ef51c1433 100644 --- a/mm/mm_heap/mm_initialize.c +++ b/mm/mm_heap/mm_initialize.c @@ -217,13 +217,13 @@ FAR struct mm_heap_s *mm_initialize(FAR const char *name, mm_seminitialize(heap); #if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_MEMINFO) -#if defined(CONFIG_BUILD_FLAT) || defined(__KERNEL__) +# if defined(CONFIG_BUILD_FLAT) || defined(__KERNEL__) heap->mm_procfs.name = name; heap->mm_procfs.heap = heap; -#if defined (CONFIG_DEBUG_MM) && defined(CONFIG_MM_BACKTRACE_DEFAULT) +# if defined (CONFIG_DEBUG_MM) && defined(CONFIG_MM_BACKTRACE_DEFAULT) heap->mm_procfs.backtrace = true; -#endif -#endif +# endif +# endif #endif /* Add the initial region of memory to the heap */ @@ -231,10 +231,34 @@ FAR struct mm_heap_s *mm_initialize(FAR const char *name, mm_addregion(heap, heapstart, heapsize); #if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_MEMINFO) -#if defined(CONFIG_BUILD_FLAT) || defined(__KERNEL__) +# if defined(CONFIG_BUILD_FLAT) || defined(__KERNEL__) procfs_register_meminfo(&heap->mm_procfs); -#endif +# endif #endif return heap; } + +/**************************************************************************** + * Name: mm_uninitialize + * + * Description: + * Uninitialize the selected heap data structures. + * + * Input Parameters: + * heap - The heap to uninitialize + * + * Returned Value: + * None + * + ****************************************************************************/ + +void mm_uninitialize(FAR struct mm_heap_s *heap) +{ +#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_MEMINFO) +# if defined(CONFIG_BUILD_FLAT) || defined(__KERNEL__) + procfs_unregister_meminfo(&heap->mm_procfs); +# endif +#endif + mm_semuninitialize(heap); +} diff --git a/mm/mm_heap/mm_sem.c b/mm/mm_heap/mm_sem.c index f73a5b40cc..a60c91a7d5 100644 --- a/mm/mm_heap/mm_sem.c +++ b/mm/mm_heap/mm_sem.c @@ -56,6 +56,21 @@ void mm_seminitialize(FAR struct mm_heap_s *heap) _SEM_INIT(&heap->mm_semaphore, 0, 1); } +/**************************************************************************** + * Name: mm_seminitialize + * + * Description: + * Uninitialize the MM mutex + * + ****************************************************************************/ + +void mm_semuninitialize(FAR struct mm_heap_s *heap) +{ + /* Uninitialize the MM semaphore */ + + _SEM_DESTROY(&heap->mm_semaphore); +} + /**************************************************************************** * Name: mm_takesemaphore *