diff options
author | Alan Curry <pacman@TheWorld.com> | 2006-02-22 01:42:37 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-02-24 11:36:23 +1100 |
commit | f1434a4854407a262d194411245eb9ee66221f90 (patch) | |
tree | 8a4cb8b766a372519041c8601bfedd96faf2e1ba | |
parent | 01aaed9d43d5fff1ddb4c8de859f87ed7ee3608a (diff) | |
download | blackbird-op-linux-f1434a4854407a262d194411245eb9ee66221f90.tar.gz blackbird-op-linux-f1434a4854407a262d194411245eb9ee66221f90.zip |
[PATCH] powerpc: fix altivec_unavailable_exception Oopses
altivec_unavailable_exception is called without setting r3... it looks like
the r3 that actually gets passed in as struct pt_regs *regs is the
undisturbed value of r3 at the time the altivec instruction was encountered.
The user actually gets to choose the pt_regs printed in the Oops!
This fixes the oops by passing the correct pt_regs pointer to
altivec_unavailable_exception.
Signed-off-by: Alan Curry <pacman@TheWorld.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/kernel/head_32.S | 1 | ||||
-rw-r--r-- | arch/ppc/kernel/head.S | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 03b25f9359f8..a0579e859b21 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S @@ -714,6 +714,7 @@ AltiVecUnavailable: #ifdef CONFIG_ALTIVEC bne load_up_altivec /* if from user, just load it up */ #endif /* CONFIG_ALTIVEC */ + addi r3,r1,STACK_FRAME_OVERHEAD EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) PerformanceMonitor: diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S index c5a890dca9cf..53ea845fb911 100644 --- a/arch/ppc/kernel/head.S +++ b/arch/ppc/kernel/head.S @@ -751,6 +751,7 @@ AltiVecUnavailable: #ifdef CONFIG_ALTIVEC bne load_up_altivec /* if from user, just load it up */ #endif /* CONFIG_ALTIVEC */ + addi r3,r1,STACK_FRAME_OVERHEAD EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) #ifdef CONFIG_PPC64BRIDGE |