Modify logic of show_signal_msg() to return early, if possible.  Replace
printk_ratelimited() by printk() and a default rate limit burst to limit
displaying unhandled signals messages.

Signed-off-by: Murilo Opsfelder Araujo <muri...@linux.ibm.com>
---
 arch/powerpc/kernel/traps.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index cbd3dc365193..4faab4705774 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -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,12 @@ 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 (!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,
@@ -326,7 +334,8 @@ void _exception_pkey(int signr, struct pt_regs *regs, int 
code,
                return;
        }
 
-       show_signal_msg(signr, regs, code, addr);
+       if (show_unhandled_signals_ratelimited())
+               show_signal_msg(signr, regs, code, addr);
 
        if (arch_irqs_disabled() && !arch_irq_disabled_regs(regs))
                local_irq_enable();
-- 
2.17.1

Reply via email to