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)
 {
        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,