]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/powerpc/kernel/watchdog.c
powerpc/watchdog: Fix final-check recovered case
[karo-tx-linux.git] / arch / powerpc / kernel / watchdog.c
index fda4d044d3264508b93e163978e336d1d188eef4..7d16dafa1bb6b041d93f9b88015055bfa83feef8 100644 (file)
@@ -144,7 +144,6 @@ static void watchdog_smp_panic(int cpu, u64 tb)
        for_each_cpu(c, &wd_smp_cpus_pending)
                set_cpu_stuck(c, tb);
 
-out:
        wd_smp_unlock(&flags);
 
        printk_safe_flush();
@@ -157,6 +156,11 @@ out:
 
        if (hardlockup_panic)
                nmi_panic(NULL, "Hard LOCKUP");
+
+       return;
+
+out:
+       wd_smp_unlock(&flags);
 }
 
 static void wd_smp_clear_cpu_pending(int cpu, u64 tb)
@@ -263,9 +267,11 @@ static void wd_timer_fn(unsigned long data)
 
 void arch_touch_nmi_watchdog(void)
 {
+       unsigned long ticks = tb_ticks_per_usec * wd_timer_period_ms * 1000;
        int cpu = smp_processor_id();
 
-       watchdog_timer_interrupt(cpu);
+       if (get_tb() - per_cpu(wd_timer_tb, cpu) >= ticks)
+               watchdog_timer_interrupt(cpu);
 }
 EXPORT_SYMBOL(arch_touch_nmi_watchdog);