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

Michael Ellerman michael at ellerman.id.au
Tue Feb 7 13:26: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.

 arch/powerpc/kernel/head_64.S |    5 +++--
 1 files changed, 3 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
@@ -749,11 +749,12 @@ iSeries_secondary_smp_loop:
 
 	.globl decrementer_iSeries_masked
 decrementer_iSeries_masked:
+	/* We may not have a valid TOC pointer in here. */
 	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)
+	LOAD_REG_IMMEDIATE(r12, tb_ticks_per_jiffy)
+	lwz	r12,0(r12)
 	mtspr	SPRN_DEC,r12
 	/* fall through */
 



More information about the Linuxppc64-dev mailing list