diff options
author | Alan Curry <pacman@TheWorld.com> | 2006-02-22 01:42:37 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-02-23 19:36:23 -0500 |
commit | f1434a4854407a262d194411245eb9ee66221f90 (patch) | |
tree | 8a4cb8b766a372519041c8601bfedd96faf2e1ba | |
parent | 01aaed9d43d5fff1ddb4c8de859f87ed7ee3608a (diff) |
[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: | |||
714 | #ifdef CONFIG_ALTIVEC | 714 | #ifdef CONFIG_ALTIVEC |
715 | bne load_up_altivec /* if from user, just load it up */ | 715 | bne load_up_altivec /* if from user, just load it up */ |
716 | #endif /* CONFIG_ALTIVEC */ | 716 | #endif /* CONFIG_ALTIVEC */ |
717 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
717 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) | 718 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) |
718 | 719 | ||
719 | PerformanceMonitor: | 720 | 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: | |||
751 | #ifdef CONFIG_ALTIVEC | 751 | #ifdef CONFIG_ALTIVEC |
752 | bne load_up_altivec /* if from user, just load it up */ | 752 | bne load_up_altivec /* if from user, just load it up */ |
753 | #endif /* CONFIG_ALTIVEC */ | 753 | #endif /* CONFIG_ALTIVEC */ |
754 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
754 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) | 755 | EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) |
755 | 756 | ||
756 | #ifdef CONFIG_PPC64BRIDGE | 757 | #ifdef CONFIG_PPC64BRIDGE |