mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-03-25 01:43:49 +08:00
feat: mm: page poison debugging and assertion enhancements
This commit introduces a page poison debugging mechanism and additional assertions for memory management, improving system maintainability and debugging capabilities. The changes aim to detect illegal memory usage early and provide better clarity in managing page allocations. Changes: - Added `RT_DEBUGGING_PAGE_POISON` option to enable memory usage tracing. - Introduced a page poisoner for detecting illegal memory usage. - Implemented region-based memory tracking using bitmaps. - Enhanced spinlock protection for memory management operations. - Fixed several assertion checks for memory safety. - Renamed macros for consistency (`FLOOR` to `CEIL`). - Refined memory allocation and deallocation logic to include poisoning. - Updated Kconfig to add configurable `RT_PAGE_MAX_ORDER` and poison debugging. - Improved debugging outputs for page regions and memory operations. Signed-off-by: Shell <smokewood@qq.com>
This commit is contained in:
@@ -8,6 +8,17 @@ config RT_PAGE_AFFINITY_BLOCK_SIZE
|
||||
It should be set to `1ul << ((index + block) - page_offset)` in this case.
|
||||
You could also exploit this as a tunning for cache coloring.
|
||||
|
||||
config RT_PAGE_MAX_ORDER
|
||||
int "Max order of pages allocatable by page allocator"
|
||||
default 11
|
||||
depends on ARCH_MM_MMU
|
||||
help
|
||||
For example, A value of 11 means the maximum chunk of contiguous memory
|
||||
allocatable by page system is 2^(11 + ARCH_PAGE_BITS - 1) Bytes.
|
||||
Large memory requirement can consume all system resource, and should
|
||||
consider reserved memory instead to enhance system endurance.
|
||||
Max order should at least satisfied usage by huge page.
|
||||
|
||||
config RT_USING_MEMBLOCK
|
||||
bool "Using memblock"
|
||||
default n
|
||||
@@ -28,4 +39,8 @@ config RT_DEBUGGING_ALIASING
|
||||
bool "Using aliasing paging debugger"
|
||||
default n
|
||||
|
||||
config RT_DEBUGGING_PAGE_POISON
|
||||
bool "Using page poisoner to detect illegal usage"
|
||||
default n
|
||||
|
||||
endmenu
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -36,7 +36,7 @@
|
||||
#define RT_PAGE_PICK_AFFID(ptr) \
|
||||
((((long)ptr) & (RT_PAGE_AFFINITY_BLOCK_SIZE - 1)) / ARCH_PAGE_SIZE)
|
||||
|
||||
#ifdef RT_DEBUGING_PAGE_LEAK
|
||||
#ifdef RT_DEBUGGING_PAGE_LEAK
|
||||
#define DEBUG_FIELD struct { \
|
||||
/* trace list */ \
|
||||
struct rt_page *tl_next; \
|
||||
|
||||
11
src/Kconfig
11
src/Kconfig
@@ -289,17 +289,6 @@ endmenu
|
||||
|
||||
menu "Memory Management"
|
||||
|
||||
config RT_PAGE_MAX_ORDER
|
||||
int "Max order of pages allocatable by page allocator"
|
||||
default 11
|
||||
depends on ARCH_MM_MMU
|
||||
help
|
||||
For example, A value of 11 means the maximum chunk of contiguous memory
|
||||
allocatable by page system is 2^(11 + ARCH_PAGE_BITS - 1) Bytes.
|
||||
Large memory requirement can consume all system resource, and should
|
||||
consider reserved memory instead to enhance system endurance.
|
||||
Max order should at least satisfied usage by huge page.
|
||||
|
||||
config RT_USING_MEMPOOL
|
||||
bool "Using memory pool"
|
||||
default y
|
||||
|
||||
Reference in New Issue
Block a user