Index: linux-2.6.11/arch/arm/mach-pxa/pm.c
===================================================================
--- linux-2.6.11.orig/arch/arm/mach-pxa/pm.c	2005-06-19 13:38:57.000000000 +0100
+++ linux-2.6.11/arch/arm/mach-pxa/pm.c	2005-06-19 17:45:00.000000000 +0100
@@ -135,6 +135,8 @@
 	/* *** 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++)
Index: linux-2.6.11/arch/arm/kernel/setup.c
===================================================================
--- linux-2.6.11.orig/arch/arm/kernel/setup.c	2005-06-19 13:38:33.000000000 +0100
+++ linux-2.6.11/arch/arm/kernel/setup.c	2005-06-19 17:45:30.000000000 +0100
@@ -328,7 +328,7 @@
  * 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];
Index: linux-2.6.11/arch/arm/mach-sa1100/pm.c
===================================================================
--- linux-2.6.11.orig/arch/arm/mach-sa1100/pm.c	2005-03-02 07:37:50.000000000 +0000
+++ linux-2.6.11/arch/arm/mach-sa1100/pm.c	2005-06-19 17:44:29.000000000 +0100
@@ -88,6 +88,8 @@
 	/* go zzz */
 	sa1100_cpu_suspend();
 
+	cpu_init();
+
 	/*
 	 * Ensure not to come back here if it wasn't intended
 	 */
Index: linux-2.6.11/include/asm-arm/system.h
===================================================================
--- linux-2.6.11.orig/include/asm-arm/system.h	2005-06-19 13:38:45.000000000 +0100
+++ linux-2.6.11/include/asm-arm/system.h	2005-06-19 17:43:59.000000000 +0100
@@ -104,6 +104,7 @@
 extern void __show_regs(struct pt_regs *);
 
 extern int cpu_architecture(void);
+extern void cpu_init(void);
 
 #define set_cr(x)					\
 	__asm__ __volatile__(				\

