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,