]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/arm64/mm/fault.c
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
[karo-tx-linux.git] / arch / arm64 / mm / fault.c
index 0948d327d013651c7b9978023139ea9cd89ecaeb..b1fc69cd14994a0d75b404c810e04814ee298340 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[] = {