diff options
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r-- | arch/sparc64/kernel/smp.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 59f020d69d4c..524b88920947 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/cache.h> | 20 | #include <linux/cache.h> |
21 | #include <linux/jiffies.h> | 21 | #include <linux/jiffies.h> |
22 | #include <linux/profile.h> | 22 | #include <linux/profile.h> |
23 | #include <linux/bootmem.h> | 23 | #include <linux/lmb.h> |
24 | 24 | ||
25 | #include <asm/head.h> | 25 | #include <asm/head.h> |
26 | #include <asm/ptrace.h> | 26 | #include <asm/ptrace.h> |
@@ -1431,7 +1431,7 @@ EXPORT_SYMBOL(__per_cpu_shift); | |||
1431 | 1431 | ||
1432 | void __init real_setup_per_cpu_areas(void) | 1432 | void __init real_setup_per_cpu_areas(void) |
1433 | { | 1433 | { |
1434 | unsigned long goal, size, i; | 1434 | unsigned long paddr, goal, size, i; |
1435 | char *ptr; | 1435 | char *ptr; |
1436 | 1436 | ||
1437 | /* Copy section for each CPU (we discard the original) */ | 1437 | /* Copy section for each CPU (we discard the original) */ |
@@ -1441,8 +1441,13 @@ void __init real_setup_per_cpu_areas(void) | |||
1441 | for (size = PAGE_SIZE; size < goal; size <<= 1UL) | 1441 | for (size = PAGE_SIZE; size < goal; size <<= 1UL) |
1442 | __per_cpu_shift++; | 1442 | __per_cpu_shift++; |
1443 | 1443 | ||
1444 | ptr = alloc_bootmem_pages(size * NR_CPUS); | 1444 | paddr = lmb_alloc(size * NR_CPUS, PAGE_SIZE); |
1445 | if (!paddr) { | ||
1446 | prom_printf("Cannot allocate per-cpu memory.\n"); | ||
1447 | prom_halt(); | ||
1448 | } | ||
1445 | 1449 | ||
1450 | ptr = __va(paddr); | ||
1446 | __per_cpu_base = ptr - __per_cpu_start; | 1451 | __per_cpu_base = ptr - __per_cpu_start; |
1447 | 1452 | ||
1448 | for (i = 0; i < NR_CPUS; i++, ptr += size) | 1453 | for (i = 0; i < NR_CPUS; i++, ptr += size) |