This way it checks if the clocks are synchronized between CPUs too. This might be able to detect slowly drifting TSCs which only go wrong over longer time. Cc: tglx@linutronix.de Signed-off-by: Andi Kleen <ak@suse.de> --- kernel/time/clocksource.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) Index: linux/kernel/time/clocksource.c =================================================================== --- linux.orig/kernel/time/clocksource.c +++ linux/kernel/time/clocksource.c @@ -142,8 +142,13 @@ static void clocksource_watchdog(unsigne } if (!list_empty(&watchdog_list)) { - __mod_timer(&watchdog_timer, - watchdog_timer.expires + WATCHDOG_INTERVAL); + /* 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); } spin_unlock(&watchdog_lock); } @@ -165,7 +170,7 @@ static void clocksource_check_watchdog(s if (!started && watchdog) { watchdog_last = watchdog->read(); watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL; - add_timer(&watchdog_timer); + add_timer_on(&watchdog_timer, first_cpu(cpu_online_map)); } } else { if (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS) @@ -186,7 +191,8 @@ static void clocksource_check_watchdog(s watchdog_last = watchdog->read(); watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL; - add_timer(&watchdog_timer); + add_timer_on(&watchdog_timer, + first_cpu(cpu_online_map)); } } } --
| Linus Torvalds | Linux 2.6.27-rc8 |
| Jeff Chua | 2.6.27rc1 cannot boot more than 8CPUs |
| Yinghai Lu | Re: [GIT *] Allow request_firmware() to be satisfied from in-kernel, use it in mor... |
| Russell King | Re: (hacky) [PATCH] silence MODPOST section mismatch warnings |
git: | |
| Steffen Prohaska | merge vs rebase: Is visualization in gitk the only problem? |
| Shawn O. Pearce | Re: clarify git clone --local --shared --reference |
| Wink Saville | Resolving conflicts |
| Linus Torvalds | People unaware of the importance of "git gc"? |
| Richard Stallman | Real men don't attack straw men |
| Kevin Neff | Patching a SSH 'Weakness' |
| Mayuresh Kathe | Re: What is our ultimate goal?? |
| Jonathan Thornburg | strlcat/strlcpy vs overlapping arguments |
| Stefan Richter | Re: [GIT]: Networking |
| adobriyan | [PATCH 10/38] netns ct: per-netns expectations |
| "G" | Implementing RSTP and MSTP in Linux Kernel |
| Arnaldo Carvalho de Melo | Re: [PATCH 2/6] Phonet: connected sockets glue |
