[POWERPC] Make emergency stack safe for current_thread_info() use
authorMichael Ellerman <michael@ellerman.id.au>
Wed, 30 Apr 2008 03:21:45 +0000 (13:21 +1000)
committerPaul Mackerras <paulus@samba.org>
Wed, 30 Apr 2008 09:49:48 +0000 (19:49 +1000)
The current_thread_info() macro, used by preempt_count(), assumes the
base address and size of the stack are THREAD_SIZE aligned.

The emergency stack currently isn't either of these things, which
could potentially cause problems anytime we're running on the
emergency stack.  That includes when we detect a bad kernel stack
pointer, and also during early_setup_secondary().

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/setup_64.c

index dff6308d1b5eb524f44fbaf5dfa0a0866e5e58b5..25e3fd8606ab589ebae8ee51143e39a517d32505 100644 (file)
@@ -487,9 +487,12 @@ static void __init emergency_stack_init(void)
         */
        limit = min(0x10000000UL, lmb.rmo_size);
 
-       for_each_possible_cpu(i)
-               paca[i].emergency_sp =
-               __va(lmb_alloc_base(HW_PAGE_SIZE, 128, limit)) + HW_PAGE_SIZE;
+       for_each_possible_cpu(i) {
+               unsigned long sp;
+               sp  = lmb_alloc_base(THREAD_SIZE, THREAD_SIZE, limit);
+               sp += THREAD_SIZE;
+               paca[i].emergency_sp = __va(sp);
+       }
 }
 
 /*