| From: Andrew Morton <akpm@linux-foundation.org> |
| Subject: bootmem-stop-using-page-index-fix |
| Date: Wed Oct 9 02:16:16 PM PDT 2024 |
| |
| fix arch/x86/mm/init_64.c build with !CONFIG_HAVE_BOOTMEM_INFO_NODE |
| |
| Reported-by: kernel test robot <lkp@intel.com> |
| Closes: https://lore.kernel.org/oe-kbuild-all/202410090311.eaqcL7IZ-lkp@intel.com/ |
| Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| arch/x86/mm/init_64.c | 21 ++++++++++++++++----- |
| 1 file changed, 16 insertions(+), 5 deletions(-) |
| |
| --- a/arch/x86/mm/init_64.c~bootmem-stop-using-page-index-fix |
| +++ a/arch/x86/mm/init_64.c |
| @@ -985,21 +985,32 @@ int arch_add_memory(int nid, u64 start, |
| return add_pages(nid, start_pfn, nr_pages, params); |
| } |
| |
| +static void free_reserved_pages(struct page *page, unsigned long nr_pages) |
| +{ |
| + while (nr_pages--) |
| + free_reserved_page(page++); |
| +} |
| + |
| static void __meminit free_pagetable(struct page *page, int order) |
| { |
| /* bootmem page has reserved flag */ |
| if (PageReserved(page)) { |
| - enum bootmem_type type = bootmem_type(page); |
| unsigned long nr_pages = 1 << order; |
| +#ifdef CONFIG_HAVE_BOOTMEM_INFO_NODE |
| + enum bootmem_type type = bootmem_type(page); |
| |
| if (type == SECTION_INFO || type == MIX_SECTION_INFO) { |
| while (nr_pages--) |
| put_page_bootmem(page++); |
| - } else |
| - while (nr_pages--) |
| - free_reserved_page(page++); |
| - } else |
| + } else { |
| + free_reserved_pages(page, nr_pages); |
| + } |
| +#else |
| + free_reserved_pages(page, nr_pages); |
| +#endif |
| + } else { |
| free_pages((unsigned long)page_address(page), order); |
| + } |
| } |
| |
| static void __meminit free_hugepage_table(struct page *page, |
| _ |