[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