Jan Beulich
2012-Sep-26 14:00 UTC
[PATCH] 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> --- 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 notifi 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)) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Keir Fraser
2012-Sep-26 14:37 UTC
Re: [PATCH] x86: default-disable MWAIT-based idle driver for CPUs without ARAT
On 26/09/2012 15:00, "Jan Beulich" <JBeulich@suse.com> wrote:> 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>> --- 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 notifi > 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)) > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel