diff options
author | Andrew Cooper <andrew.cooper3@citrix.com> | 2013-08-13 14:29:00 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-08-13 14:29:00 +0200 |
commit | c8177e691f0f611240853326712d43482ec949bf (patch) | |
tree | c2063ee306f0c6a9c0927b2e3b114fe053193878 | |
parent | 910daaf5aaa837624099c0fc5c373bea7202ff43 (diff) | |
download | xen-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.c | 8 | ||||
-rw-r--r-- | xen/arch/x86/setup.c | 1 | ||||
-rw-r--r-- | xen/arch/x86/shutdown.c | 2 | ||||
-rw-r--r-- | xen/arch/x86/traps.c | 1 | ||||
-rw-r--r-- | xen/arch/x86/x86_64/traps.c | 1 | ||||
-rw-r--r-- | xen/common/kexec.c | 2 | ||||
-rw-r--r-- | xen/common/keyhandler.c | 2 | ||||
-rw-r--r-- | xen/common/shutdown.c | 2 | ||||
-rw-r--r-- | xen/drivers/char/console.c | 2 | ||||
-rw-r--r-- | xen/include/asm-x86/config.h | 1 | ||||
-rw-r--r-- | xen/include/asm-x86/nmi.h | 4 | ||||
-rw-r--r-- | xen/include/xen/watchdog.h | 35 |
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__ */ |