diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2006-02-07 13:26:14 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-02-07 21:51:53 +1100 |
commit | f9b4045d6bbb109d066d127549b2beb38fd9bfc4 (patch) | |
tree | d7e45a43f9cf8270c2f37f5d62a92004fa5afa2c | |
parent | 09f5dc44aeff9f792a807a7dca64c1791d98d8c8 (diff) | |
download | linux-f9b4045d6bbb109d066d127549b2beb38fd9bfc4.tar.gz linux-f9b4045d6bbb109d066d127549b2beb38fd9bfc4.tar.bz2 linux-f9b4045d6bbb109d066d127549b2beb38fd9bfc4.zip |
[PATCH] powerpc: Don't use toc in decrementer_iSeries_masked
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.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/kernel/head_64.S | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 308268466342..415659629394 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/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 */ |