aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/riscv/include/asm/bug.h2
-rw-r--r--arch/riscv/kernel/traps.c7
-rw-r--r--arch/riscv/mm/fault.c6
3 files changed, 8 insertions, 7 deletions
diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h
index 52a1fbdeab3b..f1390914ba7a 100644
--- a/arch/riscv/include/asm/bug.h
+++ b/arch/riscv/include/asm/bug.h
@@ -94,7 +94,7 @@ struct task_struct;
94 94
95extern void die(struct pt_regs *regs, const char *str); 95extern void die(struct pt_regs *regs, const char *str);
96extern void do_trap(struct pt_regs *regs, int signo, int code, 96extern void do_trap(struct pt_regs *regs, int signo, int code,
97 unsigned long addr, struct task_struct *tsk); 97 unsigned long addr);
98 98
99#endif /* !__ASSEMBLY__ */ 99#endif /* !__ASSEMBLY__ */
100 100
diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c
index 3d1a651dc54c..71445a928c1b 100644
--- a/arch/riscv/kernel/traps.c
+++ b/arch/riscv/kernel/traps.c
@@ -63,9 +63,10 @@ void die(struct pt_regs *regs, const char *str)
63 do_exit(SIGSEGV); 63 do_exit(SIGSEGV);
64} 64}
65 65
66void do_trap(struct pt_regs *regs, int signo, int code, 66void do_trap(struct pt_regs *regs, int signo, int code, unsigned long addr)
67 unsigned long addr, struct task_struct *tsk)
68{ 67{
68 struct task_struct *tsk = current;
69
69 if (show_unhandled_signals && unhandled_signal(tsk, signo) 70 if (show_unhandled_signals && unhandled_signal(tsk, signo)
70 && printk_ratelimit()) { 71 && printk_ratelimit()) {
71 pr_info("%s[%d]: unhandled signal %d code 0x%x at 0x" REG_FMT, 72 pr_info("%s[%d]: unhandled signal %d code 0x%x at 0x" REG_FMT,
@@ -82,7 +83,7 @@ static void do_trap_error(struct pt_regs *regs, int signo, int code,
82 unsigned long addr, const char *str) 83 unsigned long addr, const char *str)
83{ 84{
84 if (user_mode(regs)) { 85 if (user_mode(regs)) {
85 do_trap(regs, signo, code, addr, current); 86 do_trap(regs, signo, code, addr);
86 } else { 87 } else {
87 if (!fixup_exception(regs)) 88 if (!fixup_exception(regs))
88 die(regs, str); 89 die(regs, str);
diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c
index cec8be9e2d6a..0a0081d9b766 100644
--- a/arch/riscv/mm/fault.c
+++ b/arch/riscv/mm/fault.c
@@ -181,7 +181,7 @@ bad_area:
181 up_read(&mm->mmap_sem); 181 up_read(&mm->mmap_sem);
182 /* User mode accesses just cause a SIGSEGV */ 182 /* User mode accesses just cause a SIGSEGV */
183 if (user_mode(regs)) { 183 if (user_mode(regs)) {
184 do_trap(regs, SIGSEGV, code, addr, tsk); 184 do_trap(regs, SIGSEGV, code, addr);
185 return; 185 return;
186 } 186 }
187 187
@@ -217,7 +217,7 @@ do_sigbus:
217 /* Kernel mode? Handle exceptions or die */ 217 /* Kernel mode? Handle exceptions or die */
218 if (!user_mode(regs)) 218 if (!user_mode(regs))
219 goto no_context; 219 goto no_context;
220 do_trap(regs, SIGBUS, BUS_ADRERR, addr, tsk); 220 do_trap(regs, SIGBUS, BUS_ADRERR, addr);
221 return; 221 return;
222 222
223vmalloc_fault: 223vmalloc_fault:
@@ -231,7 +231,7 @@ vmalloc_fault:
231 231
232 /* User mode accesses just cause a SIGSEGV */ 232 /* User mode accesses just cause a SIGSEGV */
233 if (user_mode(regs)) 233 if (user_mode(regs))
234 return do_trap(regs, SIGSEGV, code, addr, tsk); 234 return do_trap(regs, SIGSEGV, code, addr);
235 235
236 /* 236 /*
237 * Synchronize this task's top level page-table 237 * Synchronize this task's top level page-table