diff options
-rw-r--r-- | mm/Kconfig.debug | 18 | ||||
-rw-r--r-- | mm/page_alloc.c | 6 |
2 files changed, 21 insertions, 3 deletions
diff --git a/mm/Kconfig.debug b/mm/Kconfig.debug index 957d3da53ddd..a0c136af9c91 100644 --- a/mm/Kconfig.debug +++ b/mm/Kconfig.debug | |||
@@ -16,8 +16,8 @@ config DEBUG_PAGEALLOC | |||
16 | select PAGE_POISONING if !ARCH_SUPPORTS_DEBUG_PAGEALLOC | 16 | select PAGE_POISONING if !ARCH_SUPPORTS_DEBUG_PAGEALLOC |
17 | ---help--- | 17 | ---help--- |
18 | Unmap pages from the kernel linear mapping after free_pages(). | 18 | Unmap pages from the kernel linear mapping after free_pages(). |
19 | This results in a large slowdown, but helps to find certain types | 19 | Depending on runtime enablement, this results in a small or large |
20 | of memory corruption. | 20 | slowdown, but helps to find certain types of memory corruption. |
21 | 21 | ||
22 | For architectures which don't enable ARCH_SUPPORTS_DEBUG_PAGEALLOC, | 22 | For architectures which don't enable ARCH_SUPPORTS_DEBUG_PAGEALLOC, |
23 | fill the pages with poison patterns after free_pages() and verify | 23 | fill the pages with poison patterns after free_pages() and verify |
@@ -26,5 +26,19 @@ config DEBUG_PAGEALLOC | |||
26 | that would result in incorrect warnings of memory corruption after | 26 | that would result in incorrect warnings of memory corruption after |
27 | a resume because free pages are not saved to the suspend image. | 27 | a resume because free pages are not saved to the suspend image. |
28 | 28 | ||
29 | By default this option will have a small overhead, e.g. by not | ||
30 | allowing the kernel mapping to be backed by large pages on some | ||
31 | architectures. Even bigger overhead comes when the debugging is | ||
32 | enabled by DEBUG_PAGEALLOC_ENABLE_DEFAULT or the debug_pagealloc | ||
33 | command line parameter. | ||
34 | |||
35 | config DEBUG_PAGEALLOC_ENABLE_DEFAULT | ||
36 | bool "Enable debug page memory allocations by default?" | ||
37 | default n | ||
38 | depends on DEBUG_PAGEALLOC | ||
39 | ---help--- | ||
40 | Enable debug page memory allocations by default? This value | ||
41 | can be overridden by debug_pagealloc=off|on. | ||
42 | |||
29 | config PAGE_POISONING | 43 | config PAGE_POISONING |
30 | bool | 44 | bool |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index fe4378fc0ab6..36a0a792f4f8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -478,7 +478,8 @@ void prep_compound_page(struct page *page, unsigned int order) | |||
478 | 478 | ||
479 | #ifdef CONFIG_DEBUG_PAGEALLOC | 479 | #ifdef CONFIG_DEBUG_PAGEALLOC |
480 | unsigned int _debug_guardpage_minorder; | 480 | unsigned int _debug_guardpage_minorder; |
481 | bool _debug_pagealloc_enabled __read_mostly; | 481 | bool _debug_pagealloc_enabled __read_mostly |
482 | = IS_ENABLED(CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT); | ||
482 | bool _debug_guardpage_enabled __read_mostly; | 483 | bool _debug_guardpage_enabled __read_mostly; |
483 | 484 | ||
484 | static int __init early_debug_pagealloc(char *buf) | 485 | static int __init early_debug_pagealloc(char *buf) |
@@ -489,6 +490,9 @@ static int __init early_debug_pagealloc(char *buf) | |||
489 | if (strcmp(buf, "on") == 0) | 490 | if (strcmp(buf, "on") == 0) |
490 | _debug_pagealloc_enabled = true; | 491 | _debug_pagealloc_enabled = true; |
491 | 492 | ||
493 | if (strcmp(buf, "off") == 0) | ||
494 | _debug_pagealloc_enabled = false; | ||
495 | |||
492 | return 0; | 496 | return 0; |
493 | } | 497 | } |
494 | early_param("debug_pagealloc", early_debug_pagealloc); | 498 | early_param("debug_pagealloc", early_debug_pagealloc); |