[PATCH] powerpc: Don't use toc in decrementer_iSeries_masked

Michael Ellerman michael at ellerman.id.au
Mon Feb 6 17:34:14 EST 2006


Since 404849bbd2bfd62e05b36f4753f6e1af6050a824 we've been using
LOAD_REG_ADDRBASE, which uses the toc pointer, in decrementer_iSeries_masked.

This can explode if we take the decrementer interrupt while we're in a module,
because the toc pointer in r2 will be the module's toc pointer.

Instead do an immediate load. I'm not sure if we really need the trickery in
here, what do people think?

 arch/powerpc/kernel/head_64.S |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

Index: iseries/arch/powerpc/kernel/head_64.S
===================================================================
--- iseries.orig/arch/powerpc/kernel/head_64.S
+++ iseries/arch/powerpc/kernel/head_64.S
@@ -752,8 +752,13 @@ decrementer_iSeries_masked:
 	li	r11,1
 	ld	r12,PACALPPACAPTR(r13)
 	stb	r11,LPPACADECRINT(r12)
-	LOAD_REG_ADDRBASE(r12,tb_ticks_per_jiffy)
-	lwz	r12,ADDROFF(tb_ticks_per_jiffy)(r12)
+	/* We have no TOC pointer in here, so we can't load tb_ticks_per_jiffy
+	 * using the usual macros. We want to be fast, so we assume the top
+	 * word of the lppaca pointer is the same as the top word of
+	 * &tb_ticks_per_jiffy.
+	 */
+	oris    r12,r12,tb_ticks_per_jiffy at h
+	lwz	r12,tb_ticks_per_jiffy at l(r12)
 	mtspr	SPRN_DEC,r12
 	/* fall through */
 



More information about the Linuxppc64-dev mailing list