powerpc/traps: Use an explicit ratelimit state for show_signal_msg()
authorMurilo Opsfelder Araujo <muriloo@linux.ibm.com>
Wed, 1 Aug 2018 21:33:16 +0000 (18:33 -0300)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 7 Aug 2018 14:32:29 +0000 (00:32 +1000)
Replace printk_ratelimited() by printk() and a default rate limit
burst to limit displaying unhandled signals messages.

This will allow us to call print_vma_addr() in a future patch, which
does not work with printk_ratelimited().

Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/traps.c

index cbd3dc365193f257c02e15f625030bfa750c6e11..47c6620d1609547c6714a74fb2dd99808f00a51b 100644 (file)
@@ -301,6 +301,13 @@ void user_single_step_siginfo(struct task_struct *tsk,
        info->si_addr = (void __user *)regs->nip;
 }
 
+static bool show_unhandled_signals_ratelimited(void)
+{
+       static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
+                                     DEFAULT_RATELIMIT_BURST);
+       return show_unhandled_signals && __ratelimit(&rs);
+}
+
 static void show_signal_msg(int signr, struct pt_regs *regs, int code,
                            unsigned long addr)
 {
@@ -309,11 +316,15 @@ static void show_signal_msg(int signr, struct pt_regs *regs, int code,
        const char fmt64[] = KERN_INFO "%s[%d]: unhandled signal %d " \
                "at %016lx nip %016lx lr %016lx code %x\n";
 
-       if (show_unhandled_signals && unhandled_signal(current, signr)) {
-               printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
-                                  current->comm, current->pid, signr,
-                                  addr, regs->nip, regs->link, code);
-       }
+       if (!show_unhandled_signals_ratelimited())
+               return;
+
+       if (!unhandled_signal(current, signr))
+               return;
+
+       printk(regs->msr & MSR_64BIT ? fmt64 : fmt32,
+              current->comm, current->pid, signr,
+              addr, regs->nip, regs->link, code);
 }
 
 void _exception_pkey(int signr, struct pt_regs *regs, int code,