diff options
| -rw-r--r-- | arch/avr32/kernel/traps.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index d547c8df157d..6e3d491184ea 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
| @@ -75,8 +75,17 @@ void _exception(long signr, struct pt_regs *regs, int code, | |||
| 75 | { | 75 | { |
| 76 | siginfo_t info; | 76 | siginfo_t info; |
| 77 | 77 | ||
| 78 | if (!user_mode(regs)) | 78 | if (!user_mode(regs)) { |
| 79 | const struct exception_table_entry *fixup; | ||
| 80 | |||
| 81 | /* Are we prepared to handle this kernel fault? */ | ||
| 82 | fixup = search_exception_tables(regs->pc); | ||
| 83 | if (fixup) { | ||
| 84 | regs->pc = fixup->fixup; | ||
| 85 | return; | ||
| 86 | } | ||
| 79 | die("Unhandled exception in kernel mode", regs, signr); | 87 | die("Unhandled exception in kernel mode", regs, signr); |
| 88 | } | ||
| 80 | 89 | ||
| 81 | memset(&info, 0, sizeof(info)); | 90 | memset(&info, 0, sizeof(info)); |
| 82 | info.si_signo = signr; | 91 | info.si_signo = signr; |
