m68k: mm: simplify detection of memory zone boundaries
[linux-2.6-microblaze.git] / arch / m68k / mm / motorola.c
index fc16190..904c2a6 100644 (file)
@@ -365,7 +365,7 @@ static void __init map_node(int node)
  */
 void __init paging_init(void)
 {
-       unsigned long zones_size[MAX_NR_ZONES] = { 0, };
+       unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0, };
        unsigned long min_addr, max_addr;
        unsigned long addr;
        int i;
@@ -386,7 +386,7 @@ void __init paging_init(void)
 
        min_addr = m68k_memory[0].addr;
        max_addr = min_addr + m68k_memory[0].size;
-       memblock_add(m68k_memory[0].addr, m68k_memory[0].size);
+       memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
        for (i = 1; i < m68k_num_memory;) {
                if (m68k_memory[i].addr < min_addr) {
                        printk("Ignoring memory chunk at 0x%lx:0x%lx before the first chunk\n",
@@ -397,7 +397,7 @@ void __init paging_init(void)
                                (m68k_num_memory - i) * sizeof(struct m68k_mem_info));
                        continue;
                }
-               memblock_add(m68k_memory[i].addr, m68k_memory[i].size);
+               memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i);
                addr = m68k_memory[i].addr + m68k_memory[i].size;
                if (addr > max_addr)
                        max_addr = addr;
@@ -448,11 +448,10 @@ void __init paging_init(void)
 #ifdef DEBUG
        printk ("before free_area_init\n");
 #endif
-       for (i = 0; i < m68k_num_memory; i++) {
-               zones_size[ZONE_DMA] = m68k_memory[i].size >> PAGE_SHIFT;
-               free_area_init_node(i, zones_size,
-                                   m68k_memory[i].addr >> PAGE_SHIFT, NULL);
+       for (i = 0; i < m68k_num_memory; i++)
                if (node_present_pages(i))
                        node_set_state(i, N_NORMAL_MEMORY);
-       }
+
+       max_zone_pfn[ZONE_DMA] = memblock_end_of_DRAM();
+       free_area_init(max_zone_pfn);
 }