*/
 static void __init free_unused_memmap(void)
 {
-       unsigned long start, prev_end = 0;
-       struct memblock_region *reg;
+       unsigned long start, end, prev_end = 0;
+       int i;
 
        /*
         * This relies on each bank being in address order.
         * The banks are sorted previously in bootmem_init().
         */
-       for_each_memblock(memory, reg) {
-               start = memblock_region_memory_base_pfn(reg);
-
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, NULL) {
 #ifdef CONFIG_SPARSEMEM
                /*
                 * Take care not to free memmap entries that don't exist
                 * memmap entries are valid from the bank end aligned to
                 * MAX_ORDER_NR_PAGES.
                 */
-               prev_end = ALIGN(memblock_region_memory_end_pfn(reg),
-                                MAX_ORDER_NR_PAGES);
+               prev_end = ALIGN(end, MAX_ORDER_NR_PAGES);
        }
 
 #ifdef CONFIG_SPARSEMEM
 
  */
 static void __init free_unused_memmap(void)
 {
-       unsigned long start, prev_end = 0;
-       struct memblock_region *reg;
-
-       for_each_memblock(memory, reg) {
-               start = __phys_to_pfn(reg->base);
+       unsigned long start, end, prev_end = 0;
+       int i;
 
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, NULL) {
 #ifdef CONFIG_SPARSEMEM
                /*
                 * Take care not to free memmap entries that don't exist due
                 * memmap entries are valid from the bank end aligned to
                 * MAX_ORDER_NR_PAGES.
                 */
-               prev_end = ALIGN(__phys_to_pfn(reg->base + reg->size),
-                                MAX_ORDER_NR_PAGES);
+               prev_end = ALIGN(end, MAX_ORDER_NR_PAGES);
        }
 
 #ifdef CONFIG_SPARSEMEM
 
  */
 static void fadump_release_reserved_area(u64 start, u64 end)
 {
-       u64 tstart, tend, spfn, epfn;
-       struct memblock_region *reg;
+       u64 tstart, tend, spfn, epfn, reg_spfn, reg_epfn, i;
 
        spfn = PHYS_PFN(start);
        epfn = PHYS_PFN(end);
-       for_each_memblock(memory, reg) {
-               tstart = max_t(u64, spfn, memblock_region_memory_base_pfn(reg));
-               tend   = min_t(u64, epfn, memblock_region_memory_end_pfn(reg));
+
+       for_each_mem_pfn_range(i, MAX_NUMNODES, ®_spfn, ®_epfn, NULL) {
+               tstart = max_t(u64, spfn, reg_spfn);
+               tend   = min_t(u64, epfn, reg_epfn);
+
                if (tstart < tend) {
                        fadump_free_reserved_memory(tstart, tend);
 
 
 /* mark pages that don't exist as nosave */
 static int __init mark_nonram_nosave(void)
 {
-       struct memblock_region *reg, *prev = NULL;
+       unsigned long spfn, epfn, prev = 0;
+       int i;
 
-       for_each_memblock(memory, reg) {
-               if (prev &&
-                   memblock_region_memory_end_pfn(prev) < memblock_region_memory_base_pfn(reg))
-                       register_nosave_region(memblock_region_memory_end_pfn(prev),
-                                              memblock_region_memory_base_pfn(reg));
-               prev = reg;
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &spfn, &epfn, NULL) {
+               if (prev && prev < spfn)
+                       register_nosave_region(prev, spfn);
+
+               prev = epfn;
        }
+
        return 0;
 }
 #else /* CONFIG_NEED_MULTIPLE_NODES */
 
        unsigned long total_ram = memblock_phys_mem_size();
        unsigned long start_pfn, end_pfn;
        unsigned int nid = 0;
-       struct memblock_region *reg;
+       int i;
 
        printk(KERN_DEBUG "Top of RAM: 0x%lx, Total RAM: 0x%lx\n",
               top_of_ram, total_ram);
        printk(KERN_DEBUG "Memory hole size: %ldMB\n",
               (top_of_ram - total_ram) >> 20);
 
-       for_each_memblock(memory, reg) {
-               start_pfn = memblock_region_memory_base_pfn(reg);
-               end_pfn = memblock_region_memory_end_pfn(reg);
-
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
                fake_numa_create_new_node(end_pfn, &nid);
                memblock_set_node(PFN_PHYS(start_pfn),
                                  PFN_PHYS(end_pfn - start_pfn),
 
 
 void __init cmma_init_nodat(void)
 {
-       struct memblock_region *reg;
        struct page *page;
        unsigned long start, end, ix;
+       int i;
 
        if (cmma_flag < 2)
                return;
        mark_kernel_pgd();
 
        /* Set all kernel pages not used for page tables to stable/no-dat */
-       for_each_memblock(memory, reg) {
-               start = memblock_region_memory_base_pfn(reg);
-               end = memblock_region_memory_end_pfn(reg);
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, NULL) {
                page = pfn_to_page(start);
                for (ix = start; ix < end; ix++, page++) {
                        if (__test_and_clear_bit(PG_arch_1, &page->flags))
 
 
 static void __init do_init_bootmem(void)
 {
-       struct memblock_region *reg;
+       unsigned long start_pfn, end_pfn;
+       int i;
 
        /* Add active regions with valid PFNs. */
-       for_each_memblock(memory, reg) {
-               unsigned long start_pfn, end_pfn;
-               start_pfn = memblock_region_memory_base_pfn(reg);
-               end_pfn = memblock_region_memory_end_pfn(reg);
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL)
                __add_active_range(0, start_pfn, end_pfn);
-       }
 
        /* All of system RAM sits in node 0 for the non-NUMA case */
        allocate_pgdat(0);
 
 phys_addr_t __init memblock_mem_size(unsigned long limit_pfn)
 {
        unsigned long pages = 0;
-       struct memblock_region *r;
        unsigned long start_pfn, end_pfn;
+       int i;
 
-       for_each_memblock(memory, r) {
-               start_pfn = memblock_region_memory_base_pfn(r);
-               end_pfn = memblock_region_memory_end_pfn(r);
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
                start_pfn = min_t(unsigned long, start_pfn, limit_pfn);
                end_pfn = min_t(unsigned long, end_pfn, limit_pfn);
                pages += end_pfn - start_pfn;
 
  */
 static void __init memblocks_present(void)
 {
-       struct memblock_region *reg;
+       unsigned long start, end;
+       int i, nid;
 
-       for_each_memblock(memory, reg) {
-               memory_present(memblock_get_region_node(reg),
-                              memblock_region_memory_base_pfn(reg),
-                              memblock_region_memory_end_pfn(reg));
-       }
+       for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, &nid)
+               memory_present(nid, start, end);
 }
 
 /*