end = PFN_DOWN(physaddr + size);
 
        for (; cursor < end; cursor++) {
-               __free_pages_bootmem(pfn_to_page(cursor), 0);
+               __free_pages_bootmem(pfn_to_page(cursor), cursor, 0);
                totalram_pages++;
        }
 }
 static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
 {
        struct page *page;
-       unsigned long *map, start, end, pages, count = 0;
+       unsigned long *map, start, end, pages, cur, count = 0;
 
        if (!bdata->node_bootmem_map)
                return 0;
                if (IS_ALIGNED(start, BITS_PER_LONG) && vec == ~0UL) {
                        int order = ilog2(BITS_PER_LONG);
 
-                       __free_pages_bootmem(pfn_to_page(start), order);
+                       __free_pages_bootmem(pfn_to_page(start), start, order);
                        count += BITS_PER_LONG;
                        start += BITS_PER_LONG;
                } else {
-                       unsigned long cur = start;
+                       cur = start;
 
                        start = ALIGN(start + 1, BITS_PER_LONG);
                        while (vec && cur != start) {
                                if (vec & 1) {
                                        page = pfn_to_page(cur);
-                                       __free_pages_bootmem(page, 0);
+                                       __free_pages_bootmem(page, cur, 0);
                                        count++;
                                }
                                vec >>= 1;
                }
        }
 
+       cur = bdata->node_min_pfn;
        page = virt_to_page(bdata->node_bootmem_map);
        pages = bdata->node_low_pfn - bdata->node_min_pfn;
        pages = bootmem_bootmap_pages(pages);
        count += pages;
        while (pages--)
-               __free_pages_bootmem(page++, 0);
+               __free_pages_bootmem(page++, cur++, 0);
 
        bdebug("nid=%td released=%lx\n", bdata - bootmem_node_data, count);
 
 
 }
 
 extern int __isolate_free_page(struct page *page, unsigned int order);
-extern void __free_pages_bootmem(struct page *page, unsigned int order);
+extern void __free_pages_bootmem(struct page *page, unsigned long pfn,
+                                       unsigned int order);
 extern void prep_compound_page(struct page *page, unsigned long order);
 #ifdef CONFIG_MEMORY_FAILURE
 extern bool is_free_buddy_page(struct page *page);
 
        end = PFN_DOWN(addr + size);
 
        for (; cursor < end; cursor++) {
-               __free_pages_bootmem(pfn_to_page(cursor), 0);
+               __free_pages_bootmem(pfn_to_page(cursor), cursor, 0);
                totalram_pages++;
        }
 }
                while (start + (1UL << order) > end)
                        order--;
 
-               __free_pages_bootmem(pfn_to_page(start), order);
+               __free_pages_bootmem(pfn_to_page(start), start, order);
 
                start += (1UL << order);
        }