diff options
author | Jan Beulich <jbeulich@suse.com> | 2012-09-26 17:11:39 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2012-09-26 17:11:39 +0200 |
commit | 4394401748e2892710d641ec3e73a63aecf6d6d9 (patch) | |
tree | f358bb4de2657f0b00a17148f1e52b794f9a325d /xen/arch/x86/cpu | |
parent | 6fd5f43ad974e8759a9c7bb6c61987fc214f27cc (diff) | |
download | xen-4394401748e2892710d641ec3e73a63aecf6d6d9.tar.gz xen-4394401748e2892710d641ec3e73a63aecf6d6d9.tar.bz2 xen-4394401748e2892710d641ec3e73a63aecf6d6d9.zip |
x86: default-disable MWAIT-based idle driver for CPUs without ARAT
Without ARAT, and apparently only when using HPET broadcast mode as
replacement, CPUs occasionally fail to wake up, causing the system to
(transiently) hang. Until the reason is understood, disable the driver
on such systems.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/cpu')
-rw-r--r-- | xen/arch/x86/cpu/mwait-idle.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/xen/arch/x86/cpu/mwait-idle.c b/xen/arch/x86/cpu/mwait-idle.c index 6a9ca95d33..e8b26e4ec8 100644 --- a/xen/arch/x86/cpu/mwait-idle.c +++ b/xen/arch/x86/cpu/mwait-idle.c @@ -71,7 +71,7 @@ # define pr_debug(fmt...) #endif -static __initdata bool_t no_mwait_idle; +static __initdata s8 no_mwait_idle = -1; invbool_param("mwait-idle", no_mwait_idle); static unsigned int mwait_substates; @@ -500,6 +500,13 @@ int __init mwait_idle_init(struct notifier_block *nfb) if (pm_idle_save) return -ENODEV; + /* XXX The no-ARAT case is supposedly being taken care of, but at + * least some systems without ARAT hang for some reason, apparently + * only when using HPET broadcast mode (PIT broadcast mode seems to + * be fine). */ + if (no_mwait_idle < 0 && boot_cpu_has(X86_FEATURE_ARAT)) + no_mwait_idle = 0; + err = mwait_idle_probe(); if (!err) { if (!boot_cpu_has(X86_FEATURE_ARAT)) |