aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/process.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2007-05-01 03:33:10 -0400
committerPaul Mundt <lethal@hera.kernel.org>2007-05-06 22:11:57 -0400
commit3a2e117e220f000f95187ea1e1bbe83b0ed5fdfb (patch)
tree57fab5755138283793647b5d0d2a2c872f00a430 /arch/sh/kernel/process.c
parent3dde7a3c74bcc25c6fc31b836fec8c91fb0b2b8f (diff)
sh: Add die chain notifiers.
Add the atomic die chains in, kprobes needs these. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/process.c')
-rw-r--r--arch/sh/kernel/process.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index 286c80388bf5..329b3f3051de 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -7,7 +7,7 @@
7 * 7 *
8 * SuperH version: Copyright (C) 1999, 2000 Niibe Yutaka & Kaz Kojima 8 * SuperH version: Copyright (C) 1999, 2000 Niibe Yutaka & Kaz Kojima
9 * Copyright (C) 2006 Lineo Solutions Inc. support SH4A UBC 9 * Copyright (C) 2006 Lineo Solutions Inc. support SH4A UBC
10 * Copyright (C) 2002 - 2006 Paul Mundt 10 * Copyright (C) 2002 - 2007 Paul Mundt
11 */ 11 */
12#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/mm.h> 13#include <linux/mm.h>
@@ -15,6 +15,7 @@
15#include <linux/pm.h> 15#include <linux/pm.h>
16#include <linux/kallsyms.h> 16#include <linux/kallsyms.h>
17#include <linux/kexec.h> 17#include <linux/kexec.h>
18#include <asm/kdebug.h>
18#include <asm/uaccess.h> 19#include <asm/uaccess.h>
19#include <asm/mmu_context.h> 20#include <asm/mmu_context.h>
20#include <asm/ubc.h> 21#include <asm/ubc.h>
@@ -299,8 +300,8 @@ static void ubc_set_tracing(int asid, unsigned long pc)
299 ctrl_outl(0, UBC_BAMRA); 300 ctrl_outl(0, UBC_BAMRA);
300 301
301 if (current_cpu_data.type == CPU_SH7729 || 302 if (current_cpu_data.type == CPU_SH7729 ||
302 current_cpu_data.type == CPU_SH7710 || 303 current_cpu_data.type == CPU_SH7710 ||
303 current_cpu_data.type == CPU_SH7712 ) { 304 current_cpu_data.type == CPU_SH7712) {
304 ctrl_outw(BBR_INST | BBR_READ | BBR_CPU, UBC_BBRA); 305 ctrl_outw(BBR_INST | BBR_READ | BBR_CPU, UBC_BBRA);
305 ctrl_outl(BRCR_PCBA | BRCR_PCTE, UBC_BRCR); 306 ctrl_outl(BRCR_PCBA | BRCR_PCTE, UBC_BRCR);
306 } else { 307 } else {
@@ -496,6 +497,10 @@ asmlinkage void debug_trap_handler(unsigned long r4, unsigned long r5,
496 /* Rewind */ 497 /* Rewind */
497 regs->pc -= 2; 498 regs->pc -= 2;
498 499
500 if (notify_die(DIE_TRAP, regs, regs->tra & 0xff,
501 SIGTRAP) == NOTIFY_STOP)
502 return;
503
499 force_sig(SIGTRAP, current); 504 force_sig(SIGTRAP, current);
500} 505}
501 506
@@ -511,6 +516,10 @@ asmlinkage void bug_trap_handler(unsigned long r4, unsigned long r5,
511 /* Rewind */ 516 /* Rewind */
512 regs->pc -= 2; 517 regs->pc -= 2;
513 518
519 if (notify_die(DIE_TRAP, regs, TRAPA_BUG_OPCODE & 0xff,
520 SIGTRAP) == NOTIFY_STOP)
521 return;
522
514#ifdef CONFIG_BUG 523#ifdef CONFIG_BUG
515 if (__kernel_text_address(instruction_pointer(regs))) { 524 if (__kernel_text_address(instruction_pointer(regs))) {
516 u16 insn = *(u16 *)instruction_pointer(regs); 525 u16 insn = *(u16 *)instruction_pointer(regs);