Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ static void __init setup_processor(void)
 * cpu_init dumps the cache information, initialises SMP specific
 * information, and sets up the per-CPU stacks.
 */
void __init cpu_init(void)
void cpu_init(void)
{
	unsigned int cpu = smp_processor_id();
	struct stack *stk = &stacks[cpu];
+2 −0
Original line number Diff line number Diff line
@@ -133,6 +133,8 @@ static int pxa_pm_enter(suspend_state_t state)
	/* *** go zzz *** */
	pxa_cpu_pm_enter(state);

	cpu_init();

	/* after sleeping, validate the checksum */
	checksum = 0;
	for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
+2 −0
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ static int sa11x0_pm_enter(suspend_state_t state)
	/* go zzz */
	sa1100_cpu_suspend();

	cpu_init();

	/*
	 * Ensure not to come back here if it wasn't intended
	 */
+1 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ extern void show_pte(struct mm_struct *mm, unsigned long addr);
extern void __show_regs(struct pt_regs *);

extern int cpu_architecture(void);
extern void cpu_init(void);

#define set_cr(x)					\
	__asm__ __volatile__(				\