--- /dev/null
+From a3b13c23f186ecb57204580cc1f2dbe9c284953a Mon Sep 17 00:00:00 2001
+From: Ingo Molnar <mingo@elte.hu>
+Date: Tue, 16 Oct 2007 23:26:06 -0700
+Subject: [PATCH] softlockup: use cpu_clock() instead of sched_clock()
+
+From: Ingo Molnar <mingo@elte.hu>
+
+patch a3b13c23f186ecb57204580cc1f2dbe9c284953a in mainline.
+
+sched_clock() is not a reliable time-source, use cpu_clock() instead.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/softlockup.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+--- a/kernel/softlockup.c
++++ b/kernel/softlockup.c
+@@ -43,14 +43,16 @@ static struct notifier_block panic_block
+ * resolution, and we don't need to waste time with a big divide when
+ * 2^30ns == 1.074s.
+ */
+-static unsigned long get_timestamp(void)
++static unsigned long get_timestamp(int this_cpu)
+ {
+- return sched_clock() >> 30; /* 2^30 ~= 10^9 */
++ return cpu_clock(this_cpu) >> 30; /* 2^30 ~= 10^9 */
+ }
+
+ void touch_softlockup_watchdog(void)
+ {
+- __raw_get_cpu_var(touch_timestamp) = get_timestamp();
++ int this_cpu = raw_smp_processor_id();
++
++ __raw_get_cpu_var(touch_timestamp) = get_timestamp(this_cpu);
+ }
+ EXPORT_SYMBOL(touch_softlockup_watchdog);
+
+@@ -96,7 +98,7 @@ void softlockup_tick(void)
+ return;
+ }
+
+- now = get_timestamp();
++ now = get_timestamp(this_cpu);
+
+ /* Wake up the high-prio watchdog task every second: */
+ if (now > (touch_timestamp + 1))