sparc64: Use node local allocations for IRQ stacks.
authorDavid S. Miller <davem@davemloft.net>
Fri, 27 Apr 2012 03:50:34 +0000 (20:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Apr 2012 03:50:34 +0000 (20:50 -0700)
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/mm/init_64.c

index 5b84559..def9223 100644 (file)
@@ -1748,22 +1748,27 @@ void __init paging_init(void)
 #endif
        }
 
+       /* Setup bootmem... */
+       last_valid_pfn = end_pfn = bootmem_init(phys_base);
+
+#ifndef CONFIG_NEED_MULTIPLE_NODES
+       max_mapnr = last_valid_pfn;
+#endif
        /* Once the OF device tree and MDESC have been setup, we know
         * the list of possible cpus.  Therefore we can allocate the
         * IRQ stacks.
         */
        for_each_possible_cpu(i) {
-               /* XXX Use node local allocations... XXX */
-               softirq_stack[i] = __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
-               hardirq_stack[i] = __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
-       }
+               int node = cpu_to_node(i);
 
-       /* Setup bootmem... */
-       last_valid_pfn = end_pfn = bootmem_init(phys_base);
+               softirq_stack[i] = __alloc_bootmem_node(NODE_DATA(node),
+                                                       THREAD_SIZE,
+                                                       THREAD_SIZE, 0);
+               hardirq_stack[i] = __alloc_bootmem_node(NODE_DATA(node),
+                                                       THREAD_SIZE,
+                                                       THREAD_SIZE, 0);
+       }
 
-#ifndef CONFIG_NEED_MULTIPLE_NODES
-       max_mapnr = last_valid_pfn;
-#endif
        kernel_physical_mapping_init();
 
        {