Commit 36c5ed23 authored by Russell King's avatar Russell King

[PATCH] ARM SMP: Fix PXA/SA11x0 suspend resume crash

We need to re-initialise the stack pointers for undefined, IRQ
and abort mode handlers whenever we resume.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 3aa3dfb3
...@@ -328,7 +328,7 @@ static void __init setup_processor(void) ...@@ -328,7 +328,7 @@ static void __init setup_processor(void)
* cpu_init dumps the cache information, initialises SMP specific * cpu_init dumps the cache information, initialises SMP specific
* information, and sets up the per-CPU stacks. * information, and sets up the per-CPU stacks.
*/ */
void __init cpu_init(void) void cpu_init(void)
{ {
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
struct stack *stk = &stacks[cpu]; struct stack *stk = &stacks[cpu];
......
...@@ -133,6 +133,8 @@ static int pxa_pm_enter(suspend_state_t state) ...@@ -133,6 +133,8 @@ static int pxa_pm_enter(suspend_state_t state)
/* *** go zzz *** */ /* *** go zzz *** */
pxa_cpu_pm_enter(state); pxa_cpu_pm_enter(state);
cpu_init();
/* after sleeping, validate the checksum */ /* after sleeping, validate the checksum */
checksum = 0; checksum = 0;
for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
......
...@@ -88,6 +88,8 @@ static int sa11x0_pm_enter(suspend_state_t state) ...@@ -88,6 +88,8 @@ static int sa11x0_pm_enter(suspend_state_t state)
/* go zzz */ /* go zzz */
sa1100_cpu_suspend(); sa1100_cpu_suspend();
cpu_init();
/* /*
* Ensure not to come back here if it wasn't intended * Ensure not to come back here if it wasn't intended
*/ */
......
...@@ -104,6 +104,7 @@ extern void show_pte(struct mm_struct *mm, unsigned long addr); ...@@ -104,6 +104,7 @@ extern void show_pte(struct mm_struct *mm, unsigned long addr);
extern void __show_regs(struct pt_regs *); extern void __show_regs(struct pt_regs *);
extern int cpu_architecture(void); extern int cpu_architecture(void);
extern void cpu_init(void);
#define set_cr(x) \ #define set_cr(x) \
__asm__ __volatile__( \ __asm__ __volatile__( \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment