Message ID | 20240221194052.927623-21-surenb@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Memory allocation profiling | expand |
On 2/21/24 20:40, Suren Baghdasaryan wrote: > 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> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> > --- > mm/page_ext.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/mm/page_ext.c b/mm/page_ext.c > index 3c58fe8a24df..e7d8f1a5589e 100644 > --- a/mm/page_ext.c > +++ b/mm/page_ext.c > @@ -95,7 +95,16 @@ unsigned long page_ext_size; > > static unsigned long total_usage; > > +#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;
diff --git a/mm/page_ext.c b/mm/page_ext.c index 3c58fe8a24df..e7d8f1a5589e 100644 --- a/mm/page_ext.c +++ b/mm/page_ext.c @@ -95,7 +95,16 @@ unsigned long page_ext_size; static unsigned long total_usage; +#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;
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> --- mm/page_ext.c | 9 +++++++++ 1 file changed, 9 insertions(+)