/*
  * Called once to set up the allocator itself.
  */
-static unsigned long __init init_bootmem_core(pg_data_t *pgdat,
+static unsigned long __init init_bootmem_core(bootmem_data_t *bdata,
        unsigned long mapstart, unsigned long start, unsigned long end)
 {
-       bootmem_data_t *bdata = pgdat->bdata;
        unsigned long mapsize;
 
        mminit_validate_memmodel_limits(&start, &end);
        return ret;
 }
 
-static unsigned long __init free_all_bootmem_core(pg_data_t *pgdat)
+static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
 {
        struct page *page;
        unsigned long pfn;
-       bootmem_data_t *bdata = pgdat->bdata;
        unsigned long i, count;
        unsigned long idx;
        unsigned long *map; 
 unsigned long __init init_bootmem_node(pg_data_t *pgdat, unsigned long freepfn,
                                unsigned long startpfn, unsigned long endpfn)
 {
-       return init_bootmem_core(pgdat, freepfn, startpfn, endpfn);
+       return init_bootmem_core(pgdat->bdata, freepfn, startpfn, endpfn);
 }
 
 int __init reserve_bootmem_node(pg_data_t *pgdat, unsigned long physaddr,
 unsigned long __init free_all_bootmem_node(pg_data_t *pgdat)
 {
        register_page_bootmem_info_node(pgdat);
-       return free_all_bootmem_core(pgdat);
+       return free_all_bootmem_core(pgdat->bdata);
 }
 
 unsigned long __init init_bootmem(unsigned long start, unsigned long pages)
 {
        max_low_pfn = pages;
        min_low_pfn = start;
-       return init_bootmem_core(NODE_DATA(0), start, 0, pages);
+       return init_bootmem_core(NODE_DATA(0)->bdata, start, 0, pages);
 }
 
 #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
 
 unsigned long __init free_all_bootmem(void)
 {
-       return free_all_bootmem_core(NODE_DATA(0));
+       return free_all_bootmem_core(NODE_DATA(0)->bdata);
 }
 
 void * __init __alloc_bootmem_nopanic(unsigned long size, unsigned long align,