Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[pandora-kernel.git] / arch / arm / mm / init.c
index 7185b00..7fd9b5e 100644 (file)
@@ -150,6 +150,7 @@ static void __init find_limits(struct meminfo *mi,
 static void __init arm_bootmem_init(struct meminfo *mi,
        unsigned long start_pfn, unsigned long end_pfn)
 {
+       struct memblock_region *reg;
        unsigned int boot_pages;
        phys_addr_t bitmap;
        pg_data_t *pgdat;
@@ -180,13 +181,13 @@ static void __init arm_bootmem_init(struct meminfo *mi,
        /*
         * Reserve the memblock reserved regions in bootmem.
         */
-       for (i = 0; i < memblock.reserved.cnt; i++) {
-               phys_addr_t start = memblock_start_pfn(&memblock.reserved, i);
-               if (start >= start_pfn &&
-                   memblock_end_pfn(&memblock.reserved, i) <= end_pfn)
+       for_each_memblock(reserved, reg) {
+               phys_addr_t start = memblock_region_reserved_base_pfn(reg);
+               phys_addr_t end = memblock_region_reserved_end_pfn(reg);
+               if (start >= start_pfn && end <= end_pfn)
                        reserve_bootmem_node(pgdat, __pfn_to_phys(start),
-                               memblock_size_bytes(&memblock.reserved, i),
-                               BOOTMEM_DEFAULT);
+                                            (end - start) << PAGE_SHIFT,
+                                            BOOTMEM_DEFAULT);
        }
 }
 
@@ -237,20 +238,7 @@ static void __init arm_bootmem_free(struct meminfo *mi, unsigned long min,
 #ifndef CONFIG_SPARSEMEM
 int pfn_valid(unsigned long pfn)
 {
-       struct memblock_region *mem = &memblock.memory;
-       unsigned int left = 0, right = mem->cnt;
-
-       do {
-               unsigned int mid = (right + left) / 2;
-
-               if (pfn < memblock_start_pfn(mem, mid))
-                       right = mid;
-               else if (pfn >= memblock_end_pfn(mem, mid))
-                       left = mid + 1;
-               else
-                       return 1;
-       } while (left < right);
-       return 0;
+       return memblock_is_memory(pfn << PAGE_SHIFT);
 }
 EXPORT_SYMBOL(pfn_valid);
 
@@ -260,10 +248,11 @@ static void arm_memory_present(void)
 #else
 static void arm_memory_present(void)
 {
-       int i;
-       for (i = 0; i < memblock.memory.cnt; i++)
-               memory_present(0, memblock_start_pfn(&memblock.memory, i),
-                                 memblock_end_pfn(&memblock.memory, i));
+       struct memblock_region *reg;
+
+       for_each_memblock(memory, reg)
+               memory_present(0, memblock_region_memory_base_pfn(reg),
+                              memblock_region_memory_end_pfn(reg));
 }
 #endif
 
@@ -277,7 +266,7 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)
 
        /* Register the kernel text, kernel data and initrd with memblock. */
 #ifdef CONFIG_XIP_KERNEL
-       memblock_reserve(__pa(_data), _end - _data);
+       memblock_reserve(__pa(_sdata), _end - _sdata);
 #else
        memblock_reserve(__pa(_stext), _end - _stext);
 #endif
@@ -545,7 +534,7 @@ void __init mem_init(void)
 
                        MLK_ROUNDUP(__init_begin, __init_end),
                        MLK_ROUNDUP(_text, _etext),
-                       MLK_ROUNDUP(_data, _edata));
+                       MLK_ROUNDUP(_sdata, _edata));
 
 #undef MLK
 #undef MLM