summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2004-09-06 07:26:07 -0700
committerLinus Torvalds <torvalds@x86-64.osdl.org>2004-09-06 07:26:07 -0700
commit2cd242672eca6ba741dda2a13adf7e9ccd7d7451 (patch)
tree9012474f2da76cfbe2ef55c16ffc757d9bd781e4
parent41d1425b0a82965084d70a620d91421c4e8638b0 (diff)
[PATCH] ppc64: Fix POWER5/JS20 SMP init
My recent change to dynamically allocate emergency stacks broke JS20 blades and POWER5. Since we use the emergency stacks in real mode during secondary CPU bringup they must be below the RMO. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--arch/ppc64/kernel/setup.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c
index 06c8abd91ef0..e73a71e9c834 100644
--- a/arch/ppc64/kernel/setup.c
+++ b/arch/ppc64/kernel/setup.c
@@ -724,16 +724,23 @@ static void __init irqstack_early_init(void)
*/
static void __init emergency_stack_init(void)
{
+ unsigned long limit;
unsigned int i;
/*
* Emergency stacks must be under 256MB, we cannot afford to take
* SLB misses on them. The ABI also requires them to be 128-byte
* aligned.
+ *
+ * Since we use these as temporary stacks during secondary CPU
+ * bringup, we need to get at them in real mode. This means they
+ * must also be within the RMO region.
*/
+ limit = min(0x10000000UL, lmb.rmo_size);
+
for_each_cpu(i)
paca[i].emergency_sp = __va(lmb_alloc_base(PAGE_SIZE, 128,
- 0x10000000)) + PAGE_SIZE;
+ limit)) + PAGE_SIZE;
}
/*