diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-03-27 04:47:53 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-03-27 04:47:53 +0000 |
commit | 36ea5120664550fae6d31f1c6f695e4f8975cb06 (patch) | |
tree | 7b985f066e6fa149027022366b9f3dd92506db24 /arch/mips/kernel/traps.c | |
parent | f7f4aaffdad04eb69ab618c771df0416ad04a952 (diff) |
o Speedup syscalls. Now 816ns per syscall. Yes, nanoseconds and goodbye
Pentium :-)
o Little bit smarter handling of unimplemented exceptions.
o Fix FPU context switches.
o Fix reboot / halt. Powerdown in software still doesn't work.
o Fix the fix for handling of return values of interrupted syscalls.
o Handling of the Indy second level cache now works as spec'ed. Purely
cosmentic, this was not causing any problems.
Diffstat (limited to 'arch/mips/kernel/traps.c')
-rw-r--r-- | arch/mips/kernel/traps.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index f2ad107fa..629a07836 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -8,7 +8,7 @@ * Copyright 1994, 1995, 1996, 1997 by Ralf Baechle * Modified for R3000 by Paul M. Antoine, 1995, 1996 * - * $Id: traps.c,v 1.7 1998/03/17 22:07:38 ralf Exp $ + * $Id: traps.c,v 1.12 1998/03/26 07:39:11 ralf Exp $ */ #include <linux/config.h> #include <linux/init.h> @@ -183,6 +183,7 @@ static void default_be_board_handler(struct pt_regs *regs) void do_ibe(struct pt_regs *regs) { lock_kernel(); +show_regs(regs); while(1); ibe_board_handler(regs); unlock_kernel(); } @@ -190,6 +191,7 @@ void do_ibe(struct pt_regs *regs) void do_dbe(struct pt_regs *regs) { lock_kernel(); +show_regs(regs); while(1); dbe_board_handler(regs); unlock_kernel(); } @@ -240,11 +242,11 @@ void do_fpe(struct pt_regs *regs, unsigned long fcr31) show_regs(regs); #endif if (fcr31 & 0x20000) { - printk("Unimplemented exception at 0x%08lx in %s.\n", - regs->cp0_epc, current->comm); /* Retry instruction with flush to zero ... */ if (!(fcr31 & (1<<24))) { - printk("Setting flush to zero ...\n"); + printk("Setting flush to zero for %s.\n", + current->comm); + fcr31 &= ~0x20000; fcr31 |= (1<<24); __asm__ __volatile__( "ctc1\t%0,$31" @@ -252,6 +254,8 @@ void do_fpe(struct pt_regs *regs, unsigned long fcr31) : "r" (fcr31)); goto out; } + printk("Unimplemented exception at 0x%08lx in %s.\n", + regs->cp0_epc, current->comm); } if (compute_return_epc(regs)) goto out; |