From: Ingo Molnar 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 Signed-off-by: Andrew Morton --- 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); _