On Tue, Feb 15, 2011 at 01:19:52PM -0500, [email protected] wrote: > > The patch below does not apply to the .37-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <[email protected]>.
Yeah, due to the this_cpu* stuff. Here's a version that applies against your pile at http://www.kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.37.1-rc1.gz I've merged it together with 1c9d16e35911090dee3f9313e6af13af623d66ee from upstream which fixes a __cpuinit section mismatch so that we can have a clean bisect in .37 stable; I hope that's OK. Thanks. -- From: Borislav Petkov <[email protected]> Date: Thu, 20 Jan 2011 15:42:52 +0100 Subject: [PATCH] x86, hotplug: Fix powersavings with offlined cores on AMD Upstream commits: 93789b32dbf355e70f18b17a82e8661677a7f7fb, 1c9d16e35911090dee3f9313e6af13af623d66ee ea53069231f9317062910d6e772cca4ce93de8c8 made a CPU use monitor/mwait when offline. This is not the optimal choice for AMD wrt to powersavings and we'd prefer our cores to halt (i.e. enter C1) instead. For this, the same selection whether to use monitor/mwait has to be used as when we select the idle routine for the machine. With this patch, offlining cores 1-5 on a X6 machine allows core0 to boost again. [ hpa: putting this in urgent since it is a (power) regression fix ] Reported-by: Andreas Herrmann <[email protected]> Cc: [email protected] # 37.x Cc: H. Peter Anvin <[email protected]> Cc: Arjan van de Ven <[email protected]> Cc: Len Brown <[email protected]> Cc: Venkatesh Pallipadi <[email protected]> Cc: Peter Zijlstra <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> LKML-Reference: <[email protected]> Signed-off-by: H. Peter Anvin <[email protected]> --- arch/x86/include/asm/cpu.h | 1 + arch/x86/kernel/process.c | 5 +++-- arch/x86/kernel/smpboot.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index 4fab24d..4564c8e 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -32,5 +32,6 @@ extern void arch_unregister_cpu(int); DECLARE_PER_CPU(int, cpu_state); +int mwait_usable(const struct cpuinfo_x86 *); #endif /* _ASM_X86_CPU_H */ diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 2502aaf..12d4bf1 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -14,6 +14,7 @@ #include <linux/utsname.h> #include <trace/events/power.h> #include <linux/hw_breakpoint.h> +#include <asm/cpu.h> #include <asm/system.h> #include <asm/apic.h> #include <asm/syscalls.h> @@ -509,13 +510,13 @@ static void poll_idle(void) * * idle=mwait overrides this decision and forces the usage of mwait. */ -static int __cpuinitdata force_mwait; +static int force_mwait; #define MWAIT_INFO 0x05 #define MWAIT_ECX_EXTENDED_INFO 0x01 #define MWAIT_EDX_C1 0xf0 -static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) +int mwait_usable(const struct cpuinfo_x86 *c) { u32 eax, ebx, ecx, edx; diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 083e99d..d8fd571 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1396,8 +1396,9 @@ static inline void mwait_play_dead(void) unsigned int highest_subcstate = 0; int i; void *mwait_ptr; + struct cpuinfo_x86 *c = ¤t_cpu_data; - if (!cpu_has(¤t_cpu_data, X86_FEATURE_MWAIT)) + if (!(cpu_has(c, X86_FEATURE_MWAIT) && mwait_usable(c))) return; if (!cpu_has(¤t_cpu_data, X86_FEATURE_CLFLSH)) return; -- 1.7.4.rc2 -- Regards/Gruss, Boris. Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach General Managers: Alberto Bozzo, Andrew Bowd Registration: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 _______________________________________________ stable mailing list [email protected] http://linux.kernel.org/mailman/listinfo/stable
