diff options
Diffstat (limited to 'arch/blackfin/kernel/traps.c')
-rw-r--r-- | arch/blackfin/kernel/traps.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 85766805b03..4eaca2d1dee 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -260,9 +260,7 @@ asmlinkage notrace void trap_c(struct pt_regs *fp) | |||
260 | #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON | 260 | #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON |
261 | int j; | 261 | int j; |
262 | #endif | 262 | #endif |
263 | #ifdef CONFIG_DEBUG_HUNT_FOR_ZERO | ||
264 | unsigned int cpu = raw_smp_processor_id(); | 263 | unsigned int cpu = raw_smp_processor_id(); |
265 | #endif | ||
266 | const char *strerror = NULL; | 264 | const char *strerror = NULL; |
267 | int sig = 0; | 265 | int sig = 0; |
268 | siginfo_t info; | 266 | siginfo_t info; |
@@ -651,7 +649,17 @@ asmlinkage notrace void trap_c(struct pt_regs *fp) | |||
651 | { | 649 | { |
652 | info.si_signo = sig; | 650 | info.si_signo = sig; |
653 | info.si_errno = 0; | 651 | info.si_errno = 0; |
654 | info.si_addr = (void __user *)fp->pc; | 652 | switch (trapnr) { |
653 | case VEC_CPLB_VL: | ||
654 | case VEC_MISALI_D: | ||
655 | case VEC_CPLB_M: | ||
656 | case VEC_CPLB_MHIT: | ||
657 | info.si_addr = (void __user *)cpu_pda[cpu].dcplb_fault_addr; | ||
658 | break; | ||
659 | default: | ||
660 | info.si_addr = (void __user *)fp->pc; | ||
661 | break; | ||
662 | } | ||
655 | force_sig_info(sig, &info, current); | 663 | force_sig_info(sig, &info, current); |
656 | } | 664 | } |
657 | 665 | ||