summaryrefslogtreecommitdiff
path: root/arch/powerpc/kernel/paca.c
diff options
context:
space:
mode:
authorMatt Evans <matt@ozlabs.org>2010-07-07 21:55:37 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2010-07-31 14:56:30 +1000
commitfc53b4202e61c7e9008c241933ae282aab8a6082 (patch)
treec279a5256ba18a27ca0b785ecf6819f592a23509 /arch/powerpc/kernel/paca.c
parent7e3f36c3e107bd76b6709e358b1e7c703fb6f81a (diff)
downloadlwn-fc53b4202e61c7e9008c241933ae282aab8a6082.tar.gz
lwn-fc53b4202e61c7e9008c241933ae282aab8a6082.zip
powerpc/kexec: Switch to a static PACA on the way out
With dynamic PACAs, the kexecing CPU's PACA won't lie within the kernel static data and there is a chance that something may stomp it when preparing to kexec. This patch switches this final CPU to a static PACA just before we pull the switch. Signed-off-by: Matt Evans <matt@ozlabs.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/paca.c')
-rw-r--r--arch/powerpc/kernel/paca.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index f88acf0218db..3db8d64f40e1 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -105,6 +105,16 @@ void __init initialise_paca(struct paca_struct *new_paca, int cpu)
#endif /* CONFIG_PPC_STD_MMU_64 */
}
+/* Put the paca pointer into r13 and SPRG_PACA */
+void setup_paca(struct paca_struct *new_paca)
+{
+ local_paca = new_paca;
+ mtspr(SPRN_SPRG_PACA, local_paca);
+#ifdef CONFIG_PPC_BOOK3E
+ mtspr(SPRN_SPRG_TLB_EXFRAME, local_paca->extlb);
+#endif
+}
+
static int __initdata paca_size;
void __init allocate_pacas(void)