Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 111135
b: refs/heads/master
c: b67b2b7
h: refs/heads/master
i:
  111133: c719265
  111131: 0f7416c
  111127: 137acbd
  111119: 3b033e6
  111103: b9bf356
v: v3
  • Loading branch information
David Daney authored and Ralf Baechle committed Oct 11, 2008
1 parent 0d65633 commit e317c02
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 654f57bfb467996fb730eae96dc30ea4de989fdc
refs/heads/master: b67b2b703047bfaf62687ca64c9486599b609ef0
4 changes: 4 additions & 0 deletions trunk/arch/mips/kernel/genex.S
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,11 @@ NESTED(nmi_handler, PT_SIZE, sp)
BUILD_HANDLER tr tr sti silent /* #13 */
BUILD_HANDLER fpe fpe fpe silent /* #15 */
BUILD_HANDLER mdmx mdmx sti silent /* #22 */
#ifdef CONFIG_HARDWARE_WATCHPOINTS
BUILD_HANDLER watch watch sti silent /* #23 */
#else
BUILD_HANDLER watch watch sti verbose /* #23 */
#endif
BUILD_HANDLER mcheck mcheck cli verbose /* #24 */
BUILD_HANDLER mt mt sti silent /* #25 */
BUILD_HANDLER dsp dsp sti silent /* #26 */
Expand Down
24 changes: 19 additions & 5 deletions trunk/arch/mips/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include <asm/tlbdebug.h>
#include <asm/traps.h>
#include <asm/uaccess.h>
#include <asm/watch.h>
#include <asm/mmu_context.h>
#include <asm/types.h>
#include <asm/stacktrace.h>
Expand Down Expand Up @@ -912,13 +913,26 @@ asmlinkage void do_mdmx(struct pt_regs *regs)

asmlinkage void do_watch(struct pt_regs *regs)
{
u32 cause;

/*
* We use the watch exception where available to detect stack
* overflows.
* Clear WP (bit 22) bit of cause register so we don't loop
* forever.
*/
dump_tlb_all();
show_regs(regs);
panic("Caught WATCH exception - probably caused by stack overflow.");
cause = read_c0_cause();
cause &= ~(1 << 22);
write_c0_cause(cause);

/*
* If the current thread has the watch registers loaded, save
* their values and send SIGTRAP. Otherwise another thread
* left the registers set, clear them and continue.
*/
if (test_tsk_thread_flag(current, TIF_LOAD_WATCH)) {
mips_read_watch_registers();
force_sig(SIGTRAP, current);
} else
mips_clear_watch_registers();
}

asmlinkage void do_mcheck(struct pt_regs *regs)
Expand Down

0 comments on commit e317c02

Please sign in to comment.