]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blobdiff - releases/2.6.25.8/x86-remove-mwait-capability-c-state-check.patch
Linux 2.6.25.8
[thirdparty/kernel/stable-queue.git] / releases / 2.6.25.8 / x86-remove-mwait-capability-c-state-check.patch
diff --git a/releases/2.6.25.8/x86-remove-mwait-capability-c-state-check.patch b/releases/2.6.25.8/x86-remove-mwait-capability-c-state-check.patch
new file mode 100644 (file)
index 0000000..c624b55
--- /dev/null
@@ -0,0 +1,95 @@
+From vegard.nossum@gmail.com Thu Jun 19 07:32:23 2008
+Date: Thu, 19 Jun 2008 16:32:14 +0200
+From: Ingo Molnar <mingo@elte.hu>
+Subject: x86: remove mwait capability C-state check
+To: stable@kernel.org
+Cc: Greg KH <greg@kroah.com>, Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>, x86@kernel.org, linux-kernel@vger.kernel.org
+Message-ID: <20080619143214.GA3243@damson.getinternet.no>
+Content-Disposition: inline
+
+From: Ingo Molnar <mingo@elte.hu>
+
+back-ported from upstream commit a738d897b7b03b83488ae74a9bc03d26a2875dc6 by Vegard Nossum
+
+Vegard Nossum reports:
+
+| powertop shows between 200-400 wakeups/second with the description
+| "<kernel IPI>: Rescheduling interrupts" when all processors have load (e.g.
+| I need to run two busy-loops on my 2-CPU system for this to show up).
+|
+| The bisect resulted in this commit:
+|
+| commit 0c07ee38c9d4eb081758f5ad14bbffa7197e1aec
+| Date:   Wed Jan 30 13:33:16 2008 +0100
+|
+|     x86: use the correct cpuid method to detect MWAIT support for C states
+
+remove the functional effects of this patch and make mwait unconditional.
+
+A future patch will turn off mwait on specific CPUs where that causes
+power to be wasted.
+
+Bisected-by: Vegard Nossum <vegard.nossum@gmail.com>
+Tested-by: Vegard Nossum <vegard.nossum@gmail.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/process_32.c |   10 +---------
+ arch/x86/kernel/process_64.c |   11 +----------
+ 2 files changed, 2 insertions(+), 19 deletions(-)
+
+--- a/arch/x86/kernel/process_32.c
++++ b/arch/x86/kernel/process_32.c
+@@ -259,14 +259,6 @@ static void mwait_idle(void)
+       mwait_idle_with_hints(0, 0);
+ }
+-static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c)
+-{
+-      if (force_mwait)
+-              return 1;
+-      /* Any C1 states supported? */
+-      return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0;
+-}
+-
+ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
+ {
+       static int selected;
+@@ -279,7 +271,7 @@ void __cpuinit select_idle_routine(const
+                       " performance may degrade.\n");
+       }
+ #endif
+-      if (cpu_has(c, X86_FEATURE_MWAIT) && mwait_usable(c)) {
++      if (cpu_has(c, X86_FEATURE_MWAIT)) {
+               /*
+                * Skip, if setup has overridden idle.
+                * One CPU supports mwait => All CPUs supports mwait
+--- a/arch/x86/kernel/process_64.c
++++ b/arch/x86/kernel/process_64.c
+@@ -254,15 +254,6 @@ static void mwait_idle(void)
+       }
+ }
+-
+-static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c)
+-{
+-      if (force_mwait)
+-              return 1;
+-      /* Any C1 states supported? */
+-      return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0;
+-}
+-
+ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
+ {
+       static int selected;
+@@ -275,7 +266,7 @@ void __cpuinit select_idle_routine(const
+                       " performance may degrade.\n");
+       }
+ #endif
+-      if (cpu_has(c, X86_FEATURE_MWAIT) && mwait_usable(c)) {
++      if (cpu_has(c, X86_FEATURE_MWAIT)) {
+               /*
+                * Skip, if setup has overridden idle.
+                * One CPU supports mwait => All CPUs supports mwait