x86_64: speedup touch_nmi_watchdog
authorAndrew Morton <akpm@linux-foundation.org>
Tue, 17 Jul 2007 11:03:58 +0000 (04:03 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 17 Jul 2007 17:23:04 +0000 (10:23 -0700)
Avoid dirtying remote cpu's memory if it already has the correct value.

Cc: Andi Kleen <ak@suse.de>
Cc: Konrad Rzeszutek <konrad@darnok.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86_64/kernel/nmi.c

index 931c64bad5e6453493d02eb30f591a3fad991384..edbbc59b752334d570cb939c70ece3f43ca8ae42 100644 (file)
@@ -296,7 +296,7 @@ static DEFINE_PER_CPU(unsigned, last_irq_sum);
 static DEFINE_PER_CPU(local_t, alert_counter);
 static DEFINE_PER_CPU(int, nmi_touch);
 
-void touch_nmi_watchdog (void)
+void touch_nmi_watchdog(void)
 {
        if (nmi_watchdog > 0) {
                unsigned cpu;
@@ -306,8 +306,10 @@ void touch_nmi_watchdog (void)
                 * do it ourselves because the alert count increase is not
                 * atomic.
                 */
-               for_each_present_cpu (cpu)
-                       per_cpu(nmi_touch, cpu) = 1;
+               for_each_present_cpu(cpu) {
+                       if (per_cpu(nmi_touch, cpu) != 1)
+                               per_cpu(nmi_touch, cpu) = 1;
+               }
        }
 
        touch_softlockup_watchdog();