2006-09-24 23:49:58

by Keith Owens

[permalink] [raw]
Subject: [patch 2.6.18] Make touch_nmi_watchdog fall back to touch_softlockup_watchdog

Some architectures define their own touch_nmi_watchdog and these all
include a call to touch_softlockup_watchdog. Change all architectures
so touch_nmi_watchdog includes a call to touch_softlockup_watchdog, to
get a consistent soft watchdog state.

Also take the opportunity to kill ARCH_HAS_NMI_WATCHDOG.

Signed-off-by: Keith Owens <[email protected]>

---
include/asm-i386/irq.h | 2 +-
include/asm-x86_64/irq.h | 2 +-
include/linux/nmi.h | 8 +++++---
3 files changed, 7 insertions(+), 5 deletions(-)

Index: linux/include/asm-i386/irq.h
===================================================================
--- linux.orig/include/asm-i386/irq.h
+++ linux/include/asm-i386/irq.h
@@ -21,7 +21,7 @@ static __inline__ int irq_canonicalize(i
}

#ifdef CONFIG_X86_LOCAL_APIC
-# define ARCH_HAS_NMI_WATCHDOG /* See include/linux/nmi.h */
+# define touch_nmi_watchdog touch_nmi_watchdog
#endif

#ifdef CONFIG_4KSTACKS
Index: linux/include/asm-x86_64/irq.h
===================================================================
--- linux.orig/include/asm-x86_64/irq.h
+++ linux/include/asm-x86_64/irq.h
@@ -45,7 +45,7 @@ static __inline__ int irq_canonicalize(i
}

#ifdef CONFIG_X86_LOCAL_APIC
-#define ARCH_HAS_NMI_WATCHDOG /* See include/linux/nmi.h */
+# define touch_nmi_watchdog touch_nmi_watchdog
#endif

#ifdef CONFIG_HOTPLUG_CPU
Index: linux/include/linux/nmi.h
===================================================================
--- linux.orig/include/linux/nmi.h
+++ linux/include/linux/nmi.h
@@ -11,12 +11,14 @@
*
* If the architecture supports the NMI watchdog, touch_nmi_watchdog()
* may be used to reset the timeout - for code which intentionally
- * disables interrupts for a long time. This call is stateless.
+ * disables interrupts for a long time. This call is stateless. For other
+ * architectures, fall back to touch_softlockup_watchdog, which may itself be a
+ * no-op.
*/
-#ifdef ARCH_HAS_NMI_WATCHDOG
+#ifdef touch_nmi_watchdog
extern void touch_nmi_watchdog(void);
#else
-# define touch_nmi_watchdog() do { } while(0)
+# define touch_nmi_watchdog() touch_softlockup_watchdog()
#endif

#endif