sparc64: Get rid of real_setup_per_cpu_areas().
authorDavid S. Miller <davem@davemloft.net>
Wed, 1 Apr 2009 23:15:20 +0000 (16:15 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Jun 2009 11:56:23 +0000 (04:56 -0700)
Now that we defer the cpu_data() initializations to the end of per-cpu
setup, we can get rid of this local hack we had to setup the per-cpu
areas eary.

This is a necessary step in order to support HAVE_DYNAMIC_PER_CPU_AREA
since the per-cpu setup must run when page structs are available.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/percpu_64.h
arch/sparc/kernel/smp_64.c
arch/sparc/mm/init_64.c

index c0ab102d11f60c1a7c64e439a176c044a9d3481a..007aafb4ae97e4914dbfeba584795680d41b6adf 100644 (file)
@@ -9,8 +9,6 @@ register unsigned long __local_per_cpu_offset asm("g5");
 
 #include <asm/trap_block.h>
 
-extern void real_setup_per_cpu_areas(void);
-
 #define __per_cpu_offset(__cpu) \
        (trap_block[(__cpu)].__per_cpu_base)
 #define per_cpu_offset(x) (__per_cpu_offset(x))
@@ -19,8 +17,6 @@ extern void real_setup_per_cpu_areas(void);
 
 #else /* ! SMP */
 
-#define real_setup_per_cpu_areas()             do { } while (0)
-
 #endif /* SMP */
 
 #include <asm-generic/percpu.h>
index 045fbb554a9c4461471de961207bbf53fd5038a7..5302344e3cb4291373453de06349a9454764454b 100644 (file)
@@ -20,7 +20,7 @@
 #include <linux/cache.h>
 #include <linux/jiffies.h>
 #include <linux/profile.h>
-#include <linux/lmb.h>
+#include <linux/bootmem.h>
 #include <linux/cpu.h>
 
 #include <asm/head.h>
@@ -1371,9 +1371,9 @@ void smp_send_stop(void)
 {
 }
 
-void __init real_setup_per_cpu_areas(void)
+void __init setup_per_cpu_areas(void)
 {
-       unsigned long base, shift, paddr, goal, size, i;
+       unsigned long base, shift, goal, size, i;
        char *ptr;
 
        /* Copy section for each CPU (we discard the original) */
@@ -1383,13 +1383,12 @@ void __init real_setup_per_cpu_areas(void)
        for (size = PAGE_SIZE; size < goal; size <<= 1UL)
                shift++;
 
-       paddr = lmb_alloc(size * NR_CPUS, PAGE_SIZE);
-       if (!paddr) {
+       ptr = __alloc_bootmem(size * NR_CPUS, PAGE_SIZE, 0);
+       if (!ptr) {
                prom_printf("Cannot allocate per-cpu memory.\n");
                prom_halt();
        }
 
-       ptr = __va(paddr);
        base = ptr - __per_cpu_start;
 
        for (i = 0; i < NR_CPUS; i++, ptr += size) {
index 785f0a24fcbf37d4bc2a83551479d7a397fcb1aa..b5a5932def77ccdab2bf0733cff71b40f7a7969c 100644 (file)
@@ -1679,11 +1679,6 @@ pgd_t swapper_pg_dir[2048];
 static void sun4u_pgprot_init(void);
 static void sun4v_pgprot_init(void);
 
-/* Dummy function */
-void __init setup_per_cpu_areas(void)
-{
-}
-
 void __init paging_init(void)
 {
        unsigned long end_pfn, shift, phys_base;
@@ -1807,8 +1802,6 @@ void __init paging_init(void)
                mdesc_populate_present_mask(CPU_MASK_ALL_PTR);
        }
 
-       real_setup_per_cpu_areas();
-
        /* Once the OF device tree and MDESC have been setup, we know
         * the list of possible cpus.  Therefore we can allocate the
         * IRQ stacks.