aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Cooper <andrew.cooper3@citrix.com>2013-08-13 14:29:00 +0200
committerJan Beulich <jbeulich@suse.com>2013-08-13 14:29:00 +0200
commitc8177e691f0f611240853326712d43482ec949bf (patch)
treec2063ee306f0c6a9c0927b2e3b114fe053193878
parent910daaf5aaa837624099c0fc5c373bea7202ff43 (diff)
downloadxen-c8177e691f0f611240853326712d43482ec949bf.tar.gz
xen-c8177e691f0f611240853326712d43482ec949bf.tar.bz2
xen-c8177e691f0f611240853326712d43482ec949bf.zip
watchdog: Move watchdog from being x86 specific to common code
Augment watchdog_setup() to be able to possibly return an error, and introduce watchdog_enabled() as a better alternative to knowing the architectures internal details. This patch does not change the x86 implementaion, beyond making it compile. For header files, some includes of xen/nmi.h were only for the watchdog functions, so are replaced rather than adding an extra include of xen/watchdog.h Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Keir Fraser <keir@xen.org>
-rw-r--r--xen/arch/x86/nmi.c8
-rw-r--r--xen/arch/x86/setup.c1
-rw-r--r--xen/arch/x86/shutdown.c2
-rw-r--r--xen/arch/x86/traps.c1
-rw-r--r--xen/arch/x86/x86_64/traps.c1
-rw-r--r--xen/common/kexec.c2
-rw-r--r--xen/common/keyhandler.c2
-rw-r--r--xen/common/shutdown.c2
-rw-r--r--xen/drivers/char/console.c2
-rw-r--r--xen/include/asm-x86/config.h1
-rw-r--r--xen/include/asm-x86/nmi.h4
-rw-r--r--xen/include/xen/watchdog.h35
12 files changed, 51 insertions, 10 deletions
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index c93812f0f9..3eb2456836 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -410,7 +410,12 @@ void watchdog_enable(void)
atomic_dec(&watchdog_disable_count);
}
-void __init watchdog_setup(void)
+bool_t watchdog_enabled(void)
+{
+ return !atomic_read(&watchdog_disable_count);
+}
+
+int __init watchdog_setup(void)
{
unsigned int cpu;
@@ -423,6 +428,7 @@ void __init watchdog_setup(void)
register_cpu_notifier(&cpu_nmi_nfb);
watchdog_enable();
+ return 0;
}
void nmi_watchdog_tick(struct cpu_user_regs * regs)
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index a70d31bbbb..c550e8e5d8 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -26,6 +26,7 @@
#include <xen/pfn.h>
#include <xen/nodemask.h>
#include <xen/tmem_xen.h> /* for opt_tmem only */
+#include <xen/watchdog.h>
#include <public/version.h>
#include <compat/platform.h>
#include <compat/xen.h>
diff --git a/xen/arch/x86/shutdown.c b/xen/arch/x86/shutdown.c
index c63788389e..471568196f 100644
--- a/xen/arch/x86/shutdown.c
+++ b/xen/arch/x86/shutdown.c
@@ -12,7 +12,7 @@
#include <xen/delay.h>
#include <xen/dmi.h>
#include <xen/irq.h>
-#include <xen/nmi.h>
+#include <xen/watchdog.h>
#include <xen/console.h>
#include <xen/shutdown.h>
#include <xen/acpi.h>
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 57dbd0c120..b445b2fa3b 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -49,6 +49,7 @@
#include <xen/kexec.h>
#include <xen/trace.h>
#include <xen/paging.h>
+#include <xen/watchdog.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/atomic.h>
diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c
index bcd760908e..ea2ffb644b 100644
--- a/xen/arch/x86/x86_64/traps.c
+++ b/xen/arch/x86/x86_64/traps.c
@@ -13,6 +13,7 @@
#include <xen/shutdown.h>
#include <xen/nmi.h>
#include <xen/guest_access.h>
+#include <xen/watchdog.h>
#include <asm/current.h>
#include <asm/flushtlb.h>
#include <asm/traps.h>
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index 1ba85564db..7cd151fb57 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -12,7 +12,7 @@
#include <xen/ctype.h>
#include <xen/errno.h>
#include <xen/guest_access.h>
-#include <xen/nmi.h>
+#include <xen/watchdog.h>
#include <xen/sched.h>
#include <xen/types.h>
#include <xen/hypercall.h>
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index 507213360c..e5c15d67c5 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -16,7 +16,7 @@
#include <xen/ctype.h>
#include <xen/perfc.h>
#include <xen/mm.h>
-#include <xen/nmi.h>
+#include <xen/watchdog.h>
#include <xen/init.h>
#include <asm/debugger.h>
#include <asm/div64.h>
diff --git a/xen/common/shutdown.c b/xen/common/shutdown.c
index 73a7d7b2a6..20f04b0787 100644
--- a/xen/common/shutdown.c
+++ b/xen/common/shutdown.c
@@ -4,7 +4,7 @@
#include <xen/sched.h>
#include <xen/domain.h>
#include <xen/delay.h>
-#include <xen/nmi.h>
+#include <xen/watchdog.h>
#include <xen/shutdown.h>
#include <xen/console.h>
#ifdef CONFIG_KEXEC
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 8ac32e4f22..52ffa70ec2 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -20,7 +20,7 @@
#include <xen/keyhandler.h>
#include <xen/delay.h>
#include <xen/guest_access.h>
-#include <xen/nmi.h>
+#include <xen/watchdog.h>
#include <xen/shutdown.h>
#include <xen/video.h>
#include <xen/kexec.h>
diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h
index 0044edb060..cb7b2e4a05 100644
--- a/xen/include/asm-x86/config.h
+++ b/xen/include/asm-x86/config.h
@@ -49,6 +49,7 @@
#define CONFIG_XENOPROF 1
#define CONFIG_KEXEC 1
+#define CONFIG_WATCHDOG 1
#define HZ 100
diff --git a/xen/include/asm-x86/nmi.h b/xen/include/asm-x86/nmi.h
index e9faa72f39..98b5e04341 100644
--- a/xen/include/asm-x86/nmi.h
+++ b/xen/include/asm-x86/nmi.h
@@ -41,8 +41,4 @@ long register_guest_nmi_callback(unsigned long address);
*/
long unregister_guest_nmi_callback(void);
-void watchdog_disable(void);
-void watchdog_enable(void);
-void watchdog_setup(void);
-
#endif /* ASM_NMI_H */
diff --git a/xen/include/xen/watchdog.h b/xen/include/xen/watchdog.h
new file mode 100644
index 0000000000..e786b9b5ab
--- /dev/null
+++ b/xen/include/xen/watchdog.h
@@ -0,0 +1,35 @@
+/******************************************************************************
+ * watchdog.h
+ *
+ * Common watchdog code
+ */
+
+#ifndef __XEN_WATCHDOG_H__
+#define __XEN_WATCHDOG_H__
+
+#include <xen/types.h>
+
+#ifdef CONFIG_WATCHDOG
+
+/* Try to set up a watchdog. */
+int watchdog_setup(void);
+
+/* Enable the watchdog. */
+void watchdog_enable(void);
+
+/* Disable the watchdog. */
+void watchdog_disable(void);
+
+/* Is the watchdog currently enabled. */
+bool_t watchdog_enabled(void);
+
+#else
+
+#define watchdog_setup() ((void)0)
+#define watchdog_enable() ((void)0)
+#define watchdog_disable() ((void)0)
+#define watchdog_enabled() ((void)0)
+
+#endif
+
+#endif /* __XEN_WATCHDOG_H__ */