arm64: use private ratelimit state along with show_unhandled_signals
[sfrench/cifs-2.6.git] / arch / arm64 / mm / fault.c
index 96da13167d4a5c77564952a6d3a0fdce35d6580f..66bd92ab6f7be33616ab05fbf5c32c0a6106ef25 100644 (file)
@@ -115,8 +115,7 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
 {
        struct siginfo si;
 
-       if (show_unhandled_signals && unhandled_signal(tsk, sig) &&
-           printk_ratelimit()) {
+       if (show_unhandled_signals_ratelimited() && unhandled_signal(tsk, sig)) {
                pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
                        tsk->comm, task_pid_nr(tsk), fault_name(esr), sig,
                        addr, esr);
@@ -478,12 +477,19 @@ asmlinkage void __exception do_sp_pc_abort(unsigned long addr,
                                           struct pt_regs *regs)
 {
        struct siginfo info;
+       struct task_struct *tsk = current;
+
+       if (show_unhandled_signals && unhandled_signal(tsk, SIGBUS))
+               pr_info_ratelimited("%s[%d]: %s exception: pc=%p sp=%p\n",
+                                   tsk->comm, task_pid_nr(tsk),
+                                   esr_get_class_string(esr), (void *)regs->pc,
+                                   (void *)regs->sp);
 
        info.si_signo = SIGBUS;
        info.si_errno = 0;
        info.si_code  = BUS_ADRALN;
        info.si_addr  = (void __user *)addr;
-       arm64_notify_die("", regs, &info, esr);
+       arm64_notify_die("Oops - SP/PC alignment exception", regs, &info, esr);
 }
 
 static struct fault_info debug_fault_info[] = {