On Thu, 25 Aug 2022 18:27:14 +0800 lizhe.67@xxxxxxxxxxxxx wrote: > From: Li Zhe <lizhe.67@xxxxxxxxxxxxx> > > In 'commit 2f1ee0913ce5 ("Revert "mm: use early_pfn_to_nid in page_ext_init"")', > we call page_ext_init() after page_alloc_init_late() to avoid some panic > problem. It seems that we cannot track early page allocations in current > kernel even if page structure has been initialized early. > > This patch introduce a new boot parameter 'early_page_ext' to resolve this > problem. If we pass it to kernel, function page_ext_init() will be moved > up and feature 'deferred initialization of struct pages' will be disabled > to initialize the page allocator early and prevent from the panic problem > above. It can help us to catch early page allocations. This is useful > especially when we find that the free memory value is not the same right > after different kernel booting. > WARNING: modpost: vmlinux.o: section mismatch in reference: early_page_ext_enabled (section: .text.unlikely) -> early_page_ext (section: .meminit.data) WARNING: modpost: vmlinux.o: section mismatch in reference: early_page_ext_enabled (section: .text.unlikely) -> early_page_ext (section: .meminit.data) I did this, but it was lazy - perhaps there's a better-optimized combination of section tags. Please check? --- a/mm/page_ext.c~page_ext-introduce-boot-parameter-early_page_ext-fix +++ a/mm/page_ext.c @@ -91,7 +91,7 @@ unsigned long page_ext_size = sizeof(str static unsigned long total_usage; static struct page_ext *lookup_page_ext(const struct page *page); -bool early_page_ext __meminitdata; +bool early_page_ext; static int __init setup_early_page_ext(char *str) { early_page_ext = true; _