revert "clocksource: make clocksource watchdog cycle through online CPUs"
authorAndrew Morton <akpm@linux-foundation.org>
Thu, 20 Mar 2008 00:01:08 +0000 (17:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 20 Mar 2008 01:53:37 +0000 (18:53 -0700)
Revert commit 1ada5cba6a0318f90e45b38557e7b5206a9cba38 ("clocksource:
make clocksource watchdog cycle through online CPUs") due to the
regression reported by Gabriel C at

http://lkml.org/lkml/2008/2/24/281

(short vesion: it makes TSC be marked as always unstable on his
machine).

Cc: Andi Kleen <ak@suse.de>
Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Robert Hancock <hancockr@shaw.ca>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Gabriel C <nix.or.die@googlemail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/time/clocksource.c

index 548c436a776bd35b40b7e9143f24a2743246650b..278534bbca956a93de37352767b91cc72aa87dcd 100644 (file)
@@ -141,13 +141,8 @@ static void clocksource_watchdog(unsigned long data)
        }
 
        if (!list_empty(&watchdog_list)) {
-               /* Cycle through CPUs to check if the CPUs stay synchronized to
-                * each other. */
-               int next_cpu = next_cpu(raw_smp_processor_id(), cpu_online_map);
-               if (next_cpu >= NR_CPUS)
-                       next_cpu = first_cpu(cpu_online_map);
-               watchdog_timer.expires += WATCHDOG_INTERVAL;
-               add_timer_on(&watchdog_timer, next_cpu);
+               __mod_timer(&watchdog_timer,
+                           watchdog_timer.expires + WATCHDOG_INTERVAL);
        }
        spin_unlock(&watchdog_lock);
 }
@@ -169,7 +164,7 @@ static void clocksource_check_watchdog(struct clocksource *cs)
                if (!started && watchdog) {
                        watchdog_last = watchdog->read();
                        watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL;
-                       add_timer_on(&watchdog_timer, first_cpu(cpu_online_map));
+                       add_timer(&watchdog_timer);
                }
        } else {
                if (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS)
@@ -190,8 +185,7 @@ static void clocksource_check_watchdog(struct clocksource *cs)
                                watchdog_last = watchdog->read();
                                watchdog_timer.expires =
                                        jiffies + WATCHDOG_INTERVAL;
-                               add_timer_on(&watchdog_timer,
-                                               first_cpu(cpu_online_map));
+                               add_timer(&watchdog_timer);
                        }
                }
        }