提交 3243d874 编写于 作者: M Michael Ellerman 提交者: Paul Mackerras

[POWERPC] Make emergency stack safe for current_thread_info() use

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: NMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: NPaul Mackerras <paulus@samba.org>
上级 595f403c
...@@ -487,9 +487,12 @@ static void __init emergency_stack_init(void) ...@@ -487,9 +487,12 @@ static void __init emergency_stack_init(void)
*/ */
limit = min(0x10000000UL, lmb.rmo_size); limit = min(0x10000000UL, lmb.rmo_size);
for_each_possible_cpu(i) for_each_possible_cpu(i) {
paca[i].emergency_sp = unsigned long sp;
__va(lmb_alloc_base(HW_PAGE_SIZE, 128, limit)) + HW_PAGE_SIZE; sp = lmb_alloc_base(THREAD_SIZE, THREAD_SIZE, limit);
sp += THREAD_SIZE;
paca[i].emergency_sp = __va(sp);
}
} }
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册