arm64: Fix show_unhandled_signal_ratelimited usage
authorSuzuki K. Poulose <suzuki.poulose@arm.com>
Fri, 3 Jul 2015 14:08:08 +0000 (15:08 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 3 Jul 2015 16:03:06 +0000 (17:03 +0100)
Commit 86dca36e6ba introduced ratelimited usage for
'unhandled_signal' messages.
The commit checks the ratelimit irrespective of whether
the signal is handled or not, which is wrong and leads
to false reports like the below in dmesg :

__do_user_fault: 127 callbacks suppressed

Do the ratelimit check only if the signal is unhandled.

Fixes: 86dca36e6ba0 ("arm64: use private ratelimit state along with show_unhandled_signals")
Cc: Vladimir Murzin <Vladimir.Murzin@arm.com>
Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/traps.c
arch/arm64/mm/fault.c

index a12251c074a8298435cc5d10d7361f87a0c0b128..566bc4c350405427f1fb441169b300733aa6ddfd 100644 (file)
@@ -335,7 +335,7 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
        if (call_undef_hook(regs) == 0)
                return;
 
-       if (show_unhandled_signals_ratelimited() && unhandled_signal(current, SIGILL)) {
+       if (unhandled_signal(current, SIGILL) && show_unhandled_signals_ratelimited()) {
                pr_info("%s[%d]: undefined instruction: pc=%p\n",
                        current->comm, task_pid_nr(current), pc);
                dump_instr(KERN_INFO, regs);
index 66bd92ab6f7be33616ab05fbf5c32c0a6106ef25..ffa36e2d18e666e76223e9cf627f4227f55b2851 100644 (file)
@@ -115,7 +115,7 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
 {
        struct siginfo si;
 
-       if (show_unhandled_signals_ratelimited() && unhandled_signal(tsk, sig)) {
+       if (unhandled_signal(tsk, sig) && show_unhandled_signals_ratelimited()) {
                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);