diff options
author | Suren Baghdasaryan <surenb@google.com> | 2023-01-28 00:52:24 +0000 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-07-11 21:20:26 -0400 |
commit | 6b6031108c0af6a9bc38faed3a3352dd86b82ac7 (patch) | |
tree | b240ce7f2a1b9d6cde2618ac06a4a984a9d5c101 | |
parent | 96fb35bf17568635c51bd957a299e030743bf1e3 (diff) |
mm/page_ext: enable early_page_ext when CONFIG_MEM_ALLOC_PROFILING_DEBUG=y
For all page allocations to be tagged, page_ext has to be initialized
before the first page allocation. Early tasks allocate their stacks
using page allocator before alloc_node_page_ext() initializes page_ext
area, unless early_page_ext is enabled. Therefore these allocations will
generate a warning when CONFIG_MEM_ALLOC_PROFILING_DEBUG is enabled.
Enable early_page_ext whenever CONFIG_MEM_ALLOC_PROFILING_DEBUG=y to
ensure page_ext initialization prior to any page allocation. This will
have all the negative effects associated with early_page_ext, such as
possible longer boot time, therefore we enable it only when debugging
with CONFIG_MEM_ALLOC_PROFILING_DEBUG enabled and not universally for
CONFIG_MEM_ALLOC_PROFILING.
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
-rw-r--r-- | mm/page_ext.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/mm/page_ext.c b/mm/page_ext.c index 87961df33392..6c8ad6e12699 100644 --- a/mm/page_ext.c +++ b/mm/page_ext.c @@ -96,7 +96,16 @@ unsigned long page_ext_size; static unsigned long total_usage; static struct page_ext *lookup_page_ext(const struct page *page); +#ifdef CONFIG_MEM_ALLOC_PROFILING_DEBUG +/* + * To ensure correct allocation tagging for pages, page_ext should be available + * before the first page allocation. Otherwise early task stacks will be + * allocated before page_ext initialization and missing tags will be flagged. + */ +bool early_page_ext __meminitdata = true; +#else bool early_page_ext __meminitdata; +#endif static int __init setup_early_page_ext(char *str) { early_page_ext = true; |