[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1/3] xen/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@xxxxxxxxxx>
CC: Keir Fraser <keir@xxxxxxx>
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Tim Deegan <tim@xxxxxxx>
---
 xen/arch/x86/nmi.c           |    8 +++++++-
 xen/arch/x86/setup.c         |    1 +
 xen/arch/x86/shutdown.c      |    2 +-
 xen/arch/x86/traps.c         |    1 +
 xen/arch/x86/x86_64/traps.c  |    1 +
 xen/common/kexec.c           |    2 +-
 xen/common/keyhandler.c      |    2 +-
 xen/common/shutdown.c        |    2 +-
 xen/drivers/char/console.c   |    2 +-
 xen/include/asm-x86/config.h |    1 +
 xen/include/asm-x86/nmi.h    |    4 ----
 xen/include/xen/watchdog.h   |   35 +++++++++++++++++++++++++++++++++++
 12 files changed, 51 insertions(+), 10 deletions(-)
 create mode 100644 xen/include/xen/watchdog.h

diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index c93812f..3eb2456 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 a70d31b..c550e8e 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 c637883..4715681 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 57dbd0c..b445b2f 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 bcd7609..ea2ffb6 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 1ba8556..7cd151f 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 5072133..e5c15d6 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 73a7d7b..20f04b0 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 8ac32e4..52ffa70 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 0044edb..cb7b2e4 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 e9faa72..98b5e04 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 0000000..e786b9b
--- /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__ */
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.