[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: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -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)
|
|||||||
/* *** 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)
|
|||||||
/* 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);
|
|||||||
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__( \
|
||||||
|
Reference in New Issue
Block a user