diff options
| -rw-r--r-- | arch/sparc64/kernel/smp.c | 7 | ||||
| -rw-r--r-- | include/asm-sparc64/percpu.h | 10 |
2 files changed, 12 insertions, 5 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index cc09d8266414..0a4958536bcd 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
| @@ -1447,11 +1447,8 @@ void __init setup_per_cpu_areas(void) | |||
| 1447 | char *ptr; | 1447 | char *ptr; |
| 1448 | 1448 | ||
| 1449 | /* Copy section for each CPU (we discard the original) */ | 1449 | /* Copy section for each CPU (we discard the original) */ |
| 1450 | goal = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES); | 1450 | goal = PERCPU_ENOUGH_ROOM; |
| 1451 | #ifdef CONFIG_MODULES | 1451 | |
| 1452 | if (goal < PERCPU_ENOUGH_ROOM) | ||
| 1453 | goal = PERCPU_ENOUGH_ROOM; | ||
| 1454 | #endif | ||
| 1455 | __per_cpu_shift = 0; | 1452 | __per_cpu_shift = 0; |
| 1456 | for (size = 1UL; size < goal; size <<= 1UL) | 1453 | for (size = 1UL; size < goal; size <<= 1UL) |
| 1457 | __per_cpu_shift++; | 1454 | __per_cpu_shift++; |
diff --git a/include/asm-sparc64/percpu.h b/include/asm-sparc64/percpu.h index ced8cbde046d..0d3df76aa47f 100644 --- a/include/asm-sparc64/percpu.h +++ b/include/asm-sparc64/percpu.h | |||
| @@ -5,6 +5,16 @@ | |||
| 5 | 5 | ||
| 6 | #ifdef CONFIG_SMP | 6 | #ifdef CONFIG_SMP |
| 7 | 7 | ||
| 8 | #ifdef CONFIG_MODULES | ||
| 9 | # define PERCPU_MODULE_RESERVE 8192 | ||
| 10 | #else | ||
| 11 | # define PERCPU_MODULE_RESERVE 0 | ||
| 12 | #endif | ||
| 13 | |||
| 14 | #define PERCPU_ENOUGH_ROOM \ | ||
| 15 | (ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \ | ||
| 16 | PERCPU_MODULE_RESERVE) | ||
| 17 | |||
| 8 | extern void setup_per_cpu_areas(void); | 18 | extern void setup_per_cpu_areas(void); |
| 9 | 19 | ||
| 10 | extern unsigned long __per_cpu_base; | 20 | extern unsigned long __per_cpu_base; |
