diff options
author | Paul Mackerras <paulus@samba.org> | 2005-04-16 15:24:17 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 15:24:17 -0700 |
commit | e378cc16b0d3c1610857c4444345907020e03ece (patch) | |
tree | 0947c9f923f985319e81be3f9fe2018571e53d6b | |
parent | 6460b4cceba0181308042c8d8794eb679bfa22e5 (diff) | |
download | kernel_samsung_espresso10-e378cc16b0d3c1610857c4444345907020e03ece.zip kernel_samsung_espresso10-e378cc16b0d3c1610857c4444345907020e03ece.tar.gz kernel_samsung_espresso10-e378cc16b0d3c1610857c4444345907020e03ece.tar.bz2 |
[PATCH] ppc32: oops on kernel altivec assist exceptions
If we should happen to get an altivec assist exception while executing in
the kernel, we will currently try to handle it and fail, and end up oopsing
with (apparently) a segfault. (An altivec assist exception occurs for
floating-point altivec instructions with denormalized inputs or outputs if
the altivec unit is in java mode.)
This patch checks explicitly if we are in user mode and prints a useful
message if not.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/ppc/kernel/traps.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index ed5c7ac..aec225b 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c @@ -805,6 +805,13 @@ void AltivecAssistException(struct pt_regs *regs) if (regs->msr & MSR_VEC) giveup_altivec(current); preempt_enable(); + if (!user_mode(regs)) { + printk(KERN_ERR "altivec assist exception in kernel mode" + " at %lx\n", regs->nip); + debugger(regs); + die("altivec assist exception", regs, SIGFPE); + return; + } err = emulate_altivec(regs); if (err == 0) { |