From: Ingo Molnar <mingo@elte.hu>

This patch adds touch_softlockup_watchdog() - which can be used by code
that knows that it will cause long delays for legitimate reasons.  (such as
the suspend code.)

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/include/linux/sched.h |    4 ++++
 25-akpm/kernel/softlockup.c   |    7 ++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff -puN include/linux/sched.h~touch_softlockup_watchdog include/linux/sched.h
--- 25/include/linux/sched.h~touch_softlockup_watchdog	Wed Feb  9 14:54:29 2005
+++ 25-akpm/include/linux/sched.h	Wed Feb  9 14:54:29 2005
@@ -178,6 +178,7 @@ extern unsigned long cache_decay_ticks;
 #ifdef CONFIG_DETECT_SOFTLOCKUP
 extern void softlockup_tick(struct pt_regs *regs);
 extern void spawn_softlockup_task(void);
+extern void touch_softlockup_watchdog(void);
 #else
 static inline void softlockup_tick(struct pt_regs *regs)
 {
@@ -185,6 +186,9 @@ static inline void softlockup_tick(struc
 static inline void spawn_softlockup_task(void)
 {
 }
+static inline void touch_softlockup_watchdog(void)
+{
+}
 #endif
 
 
diff -puN kernel/softlockup.c~touch_softlockup_watchdog kernel/softlockup.c
--- 25/kernel/softlockup.c~touch_softlockup_watchdog	Wed Feb  9 14:54:29 2005
+++ 25-akpm/kernel/softlockup.c	Wed Feb  9 14:54:29 2005
@@ -20,6 +20,11 @@ static DEFINE_PER_CPU(unsigned long, tim
 static DEFINE_PER_CPU(unsigned long, print_timestamp) = 0;
 static DEFINE_PER_CPU(struct task_struct *, watchdog_task);
 
+void touch_softlockup_watchdog(void)
+{
+	per_cpu(timestamp, _smp_processor_id()) = jiffies;
+}
+
 /*
  * This callback runs from the timer interrupt, and checks
  * whether the watchdog thread has hung or not:
@@ -66,7 +71,7 @@ static int watchdog(void * __bind_cpu)
 	while (!kthread_should_stop()) {
 		set_current_state(TASK_INTERRUPTIBLE);
 		msleep_interruptible(HZ);
-		per_cpu(timestamp, this_cpu) = jiffies;
+		touch_softlockup_watchdog();
 	}
 	__set_current_state(TASK_RUNNING);
 
_