All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
@ 2011-03-23  2:24 Len Brown
  2011-03-23  2:26 ` [PATCH 2/2 2.6.37.stable] intel_idle: disable Atom/Lincroft " Len Brown
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Len Brown @ 2011-03-23  2:24 UTC (permalink / raw)
  To: stable; +Cc: linux-pm

From: Len Brown <len.brown@intel.com>

upstream 14796fca2bd22acc73dd0887248d003b0f441d08

Hardware C-state auto-demotion is a mechanism where the HW overrides
the OS C-state request, instead demoting to a shallower state,
which is less expensive, but saves less power.

Modern Linux should generally get exactly the states it requests.
In particular, when a CPU is taken off-line, it must not be demoted, else
it can prevent the entire package from reaching deep C-states.

https://bugzilla.kernel.org/show_bug.cgi?id=25252

Signed-off-by: Len Brown <len.brown@intel.com>
---
 arch/x86/include/asm/msr-index.h |    4 ++++
 drivers/idle/intel_idle.c        |   20 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 0 deletions(-)

Index: linux-2.6.37.y/arch/x86/include/asm/msr-index.h
===================================================================
--- linux-2.6.37.y.orig/arch/x86/include/asm/msr-index.h
+++ linux-2.6.37.y/arch/x86/include/asm/msr-index.h
@@ -36,6 +36,10 @@
 #define MSR_IA32_PERFCTR1		0x000000c2
 #define MSR_FSB_FREQ			0x000000cd
 
+#define MSR_NHM_SNB_PKG_CST_CFG_CTL	0x000000e2
+#define NHM_C3_AUTO_DEMOTE		(1UL << 25)
+#define NHM_C1_AUTO_DEMOTE		(1UL << 26)
+
 #define MSR_MTRRcap			0x000000fe
 #define MSR_IA32_BBL_CR_CTL		0x00000119
 
Index: linux-2.6.37.y/drivers/idle/intel_idle.c
===================================================================
--- linux-2.6.37.y.orig/drivers/idle/intel_idle.c
+++ linux-2.6.37.y/drivers/idle/intel_idle.c
@@ -62,6 +62,7 @@
 #include <linux/notifier.h>
 #include <linux/cpu.h>
 #include <asm/mwait.h>
+#include <asm/msr.h>
 
 #define INTEL_IDLE_VERSION "0.4"
 #define PREFIX "intel_idle: "
@@ -85,6 +86,12 @@ static int intel_idle(struct cpuidle_dev
 static struct cpuidle_state *cpuidle_state_table;
 
 /*
+ * Hardware C-state auto-demotion may not always be optimal.
+ * Indicate which enable bits to clear here.
+ */
+static unsigned long long auto_demotion_disable_flags;
+
+/*
  * States are indexed by the cstate number,
  * which is also the index into the MWAIT hint array.
  * Thus C0 is a dummy.
@@ -276,6 +283,15 @@ static struct notifier_block setup_broad
 	.notifier_call = setup_broadcast_cpuhp_notify,
 };
 
+static void auto_demotion_disable(void *dummy)
+{
+	unsigned long long msr_bits;
+
+	rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits);
+	msr_bits &= ~auto_demotion_disable_flags;
+	wrmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits);
+}
+
 /*
  * intel_idle_probe()
  */
@@ -319,6 +335,8 @@ static int intel_idle_probe(void)
 	case 0x25:	/* Westmere */
 	case 0x2C:	/* Westmere */
 		cpuidle_state_table = nehalem_cstates;
+		auto_demotion_disable_flags =
+			(NHM_C1_AUTO_DEMOTE | NHM_C3_AUTO_DEMOTE);
 		break;
 
 	case 0x1C:	/* 28 - Atom Processor */
@@ -431,6 +449,8 @@ static int intel_idle_cpuidle_devices_in
 			return -EIO;
 		}
 	}
+	if (auto_demotion_disable_flags)
+		smp_call_function(auto_demotion_disable, NULL, 1);
 
 	return 0;
 }

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 2/2 2.6.37.stable] intel_idle: disable Atom/Lincroft HW C-state auto-demotion
  2011-03-23  2:24 [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion Len Brown
@ 2011-03-23  2:26 ` Len Brown
  2011-03-23 22:55   ` [stable] " Greg KH
  2011-03-23 22:54 ` [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM " Greg KH
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Len Brown @ 2011-03-23  2:26 UTC (permalink / raw)
  To: stable; +Cc: linux-pm

From: Len Brown <len.brown@intel.com>

upstream bfb53ccf1c734b1907df7189eef4c08489827951

Just as we had to disable auto-demotion for NHM/WSM,
we need to do the same for Atom (Lincroft version).

In particular, auto-demotion will prevent Lincroft
from entering the S0i3 idle power saving state.

https://bugzilla.kernel.org/show_bug.cgi?id=25252

Signed-off-by: Len Brown <len.brown@intel.com>
---
 arch/x86/include/asm/msr-index.h |    1 +
 drivers/idle/intel_idle.c        |    4 ++++
 2 files changed, 5 insertions(+), 0 deletions(-)

Index: linux-2.6.37.y/arch/x86/include/asm/msr-index.h
===================================================================
--- linux-2.6.37.y.orig/arch/x86/include/asm/msr-index.h
+++ linux-2.6.37.y/arch/x86/include/asm/msr-index.h
@@ -39,6 +39,7 @@
 #define MSR_NHM_SNB_PKG_CST_CFG_CTL	0x000000e2
 #define NHM_C3_AUTO_DEMOTE		(1UL << 25)
 #define NHM_C1_AUTO_DEMOTE		(1UL << 26)
+#define ATM_LNC_C6_AUTO_DEMOTE		(1UL << 25)
 
 #define MSR_MTRRcap			0x000000fe
 #define MSR_IA32_BBL_CR_CTL		0x00000119
Index: linux-2.6.37.y/drivers/idle/intel_idle.c
===================================================================
--- linux-2.6.37.y.orig/drivers/idle/intel_idle.c
+++ linux-2.6.37.y/drivers/idle/intel_idle.c
@@ -340,8 +340,12 @@ static int intel_idle_probe(void)
 		break;
 
 	case 0x1C:	/* 28 - Atom Processor */
+		cpuidle_state_table = atom_cstates;
+		break;
+
 	case 0x26:	/* 38 - Lincroft Atom Processor */
 		cpuidle_state_table = atom_cstates;
+		auto_demotion_disable_flags = ATM_LNC_C6_AUTO_DEMOTE;
 		break;
 
 	case 0x2A:	/* SNB */

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-03-23  2:24 [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion Len Brown
  2011-03-23  2:26 ` [PATCH 2/2 2.6.37.stable] intel_idle: disable Atom/Lincroft " Len Brown
@ 2011-03-23 22:54 ` Greg KH
       [not found] ` <20110323225420.GE27334@kroah.com>
  2011-04-08 13:16 ` Pavel Machek
  3 siblings, 0 replies; 11+ messages in thread
From: Greg KH @ 2011-03-23 22:54 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-pm, stable

On Tue, Mar 22, 2011 at 10:24:43PM -0400, Len Brown wrote:
> From: Len Brown <len.brown@intel.com>
> 
> upstream 14796fca2bd22acc73dd0887248d003b0f441d08
> 
> Hardware C-state auto-demotion is a mechanism where the HW overrides
> the OS C-state request, instead demoting to a shallower state,
> which is less expensive, but saves less power.
> 
> Modern Linux should generally get exactly the states it requests.
> In particular, when a CPU is taken off-line, it must not be demoted, else
> it can prevent the entire package from reaching deep C-states.
> 
> https://bugzilla.kernel.org/show_bug.cgi?id=25252
> 
> Signed-off-by: Len Brown <len.brown@intel.com>

This patch doesn't apply to the .38-stable tree, and it also needs to go
there, right?  Can you please send a version that I can apply?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [stable] [PATCH 2/2 2.6.37.stable] intel_idle: disable Atom/Lincroft HW C-state auto-demotion
  2011-03-23  2:26 ` [PATCH 2/2 2.6.37.stable] intel_idle: disable Atom/Lincroft " Len Brown
@ 2011-03-23 22:55   ` Greg KH
  0 siblings, 0 replies; 11+ messages in thread
From: Greg KH @ 2011-03-23 22:55 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-pm, stable

On Tue, Mar 22, 2011 at 10:26:59PM -0400, Len Brown wrote:
> From: Len Brown <len.brown@intel.com>
> 
> upstream bfb53ccf1c734b1907df7189eef4c08489827951
> 
> Just as we had to disable auto-demotion for NHM/WSM,
> we need to do the same for Atom (Lincroft version).
> 
> In particular, auto-demotion will prevent Lincroft
> from entering the S0i3 idle power saving state.
> 
> https://bugzilla.kernel.org/show_bug.cgi?id=25252
> 
> Signed-off-by: Len Brown <len.brown@intel.com>

This one also doesn't apply to the .38 tree, can you provide a copy of
it as well?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
       [not found] ` <20110323225420.GE27334@kroah.com>
@ 2011-03-24  2:53   ` Len Brown
  2011-03-24  3:39     ` Greg KH
  2011-04-08 13:16     ` Pavel Machek
  0 siblings, 2 replies; 11+ messages in thread
From: Len Brown @ 2011-03-24  2:53 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-pm, stable

On Wed, 23 Mar 2011, Greg KH wrote:

> On Tue, Mar 22, 2011 at 10:24:43PM -0400, Len Brown wrote:
> > From: Len Brown <len.brown@intel.com>
> > 
> > upstream 14796fca2bd22acc73dd0887248d003b0f441d08
> > 
> > Hardware C-state auto-demotion is a mechanism where the HW overrides
> > the OS C-state request, instead demoting to a shallower state,
> > which is less expensive, but saves less power.
> > 
> > Modern Linux should generally get exactly the states it requests.
> > In particular, when a CPU is taken off-line, it must not be demoted, else
> > it can prevent the entire package from reaching deep C-states.
> > 
> > https://bugzilla.kernel.org/show_bug.cgi?id=25252
> > 
> > Signed-off-by: Len Brown <len.brown@intel.com>
> 
> This patch doesn't apply to the .38-stable tree, and it also needs to go
> there, right?  Can you please send a version that I can apply?

it is already present in 2.6.38, as is the next one.
That is why the subject specified 2.6.37.stable.

thanks,
-Len

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-03-24  2:53   ` Len Brown
@ 2011-03-24  3:39     ` Greg KH
  2011-04-08 13:16     ` Pavel Machek
  1 sibling, 0 replies; 11+ messages in thread
From: Greg KH @ 2011-03-24  3:39 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-pm, stable

On Wed, Mar 23, 2011 at 10:53:22PM -0400, Len Brown wrote:
> On Wed, 23 Mar 2011, Greg KH wrote:
> 
> > On Tue, Mar 22, 2011 at 10:24:43PM -0400, Len Brown wrote:
> > > From: Len Brown <len.brown@intel.com>
> > > 
> > > upstream 14796fca2bd22acc73dd0887248d003b0f441d08
> > > 
> > > Hardware C-state auto-demotion is a mechanism where the HW overrides
> > > the OS C-state request, instead demoting to a shallower state,
> > > which is less expensive, but saves less power.
> > > 
> > > Modern Linux should generally get exactly the states it requests.
> > > In particular, when a CPU is taken off-line, it must not be demoted, else
> > > it can prevent the entire package from reaching deep C-states.
> > > 
> > > https://bugzilla.kernel.org/show_bug.cgi?id=25252
> > > 
> > > Signed-off-by: Len Brown <len.brown@intel.com>
> > 
> > This patch doesn't apply to the .38-stable tree, and it also needs to go
> > there, right?  Can you please send a version that I can apply?
> 
> it is already present in 2.6.38, as is the next one.
> That is why the subject specified 2.6.37.stable.

Ok, sorry about that.  I got confused by git telling me something wierd:
	$ git describe --contains 14796fca2bd22acc73dd0887248d003b0f441d08
	latest~20^2~1

I guess since there is nothing newer than "latest" right now, that means
it is in 2.6.38.

Sorry for the noise.

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-03-23  2:24 [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion Len Brown
                   ` (2 preceding siblings ...)
       [not found] ` <20110323225420.GE27334@kroah.com>
@ 2011-04-08 13:16 ` Pavel Machek
  2011-04-08 22:31   ` Len Brown
  3 siblings, 1 reply; 11+ messages in thread
From: Pavel Machek @ 2011-04-08 13:16 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-pm, stable

Hi!

> Hardware C-state auto-demotion is a mechanism where the HW overrides
> the OS C-state request, instead demoting to a shallower state,
> which is less expensive, but saves less power.
> 
> Modern Linux should generally get exactly the states it requests.
> In particular, when a CPU is taken off-line, it must not be demoted, else
> it can prevent the entire package from reaching deep C-states.
> 
> https://bugzilla.kernel.org/show_bug.cgi?id=25252
> 
>  
> +#define MSR_NHM_SNB_PKG_CST_CFG_CTL	0x000000e2
> +#define NHM_C3_AUTO_DEMOTE		(1UL << 25)
> +#define NHM_C1_AUTO_DEMOTE		(1UL << 26)
> +
....
> @@ -85,6 +86,12 @@ static int intel_idle(struct cpuidle_dev
>  static struct cpuidle_state *cpuidle_state_table;
>  
>  /*
> + * Hardware C-state auto-demotion may not always be optimal.
> + * Indicate which enable bits to clear here.
> + */
> +static unsigned long long auto_demotion_disable_flags;

Why long long here, but long above?

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-03-24  2:53   ` Len Brown
  2011-03-24  3:39     ` Greg KH
@ 2011-04-08 13:16     ` Pavel Machek
  2011-04-08 16:14       ` Len Brown
  1 sibling, 1 reply; 11+ messages in thread
From: Pavel Machek @ 2011-04-08 13:16 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-pm, stable

> On Wed, 23 Mar 2011, Greg KH wrote:
> 
> > On Tue, Mar 22, 2011 at 10:24:43PM -0400, Len Brown wrote:
> > > From: Len Brown <len.brown@intel.com>
> > > 
> > > upstream 14796fca2bd22acc73dd0887248d003b0f441d08
> > > 
> > > Hardware C-state auto-demotion is a mechanism where the HW overrides
> > > the OS C-state request, instead demoting to a shallower state,
> > > which is less expensive, but saves less power.
> > > 
> > > Modern Linux should generally get exactly the states it requests.
> > > In particular, when a CPU is taken off-line, it must not be demoted, else
> > > it can prevent the entire package from reaching deep C-states.
> > > 
> > > https://bugzilla.kernel.org/show_bug.cgi?id=25252
> > > 
> > > Signed-off-by: Len Brown <len.brown@intel.com>
> > 
> > This patch doesn't apply to the .38-stable tree, and it also needs to go
> > there, right?  Can you please send a version that I can apply?
> 
> it is already present in 2.6.38, as is the next one.
> That is why the subject specified 2.6.37.stable.

Why is it stable material? Seems like small power optimalization to me...

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-04-08 13:16     ` Pavel Machek
@ 2011-04-08 16:14       ` Len Brown
  0 siblings, 0 replies; 11+ messages in thread
From: Len Brown @ 2011-04-08 16:14 UTC (permalink / raw)
  To: Pavel Machek; +Cc: linux-pm, stable

> Why is it stable material? Seems like small power optimalization to me...

Before this patch, an offline CPU could prevent
package-wide C-states.  There is a significant
power difference between being able to enter
a package-wide C-state vs. not.

While processor offline is not used by everybody,
some products use it routinely.  Indeed, MRST
simply can not ship without this patch.

thanks,
Len Brown, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-04-08 13:16 ` Pavel Machek
@ 2011-04-08 22:31   ` Len Brown
  2011-04-15 16:25     ` Pavel Machek
  0 siblings, 1 reply; 11+ messages in thread
From: Len Brown @ 2011-04-08 22:31 UTC (permalink / raw)
  To: Pavel Machek; +Cc: linux-pm, stable

> > Hardware C-state auto-demotion is a mechanism where the HW overrides
> > the OS C-state request, instead demoting to a shallower state,
> > which is less expensive, but saves less power.
> > 
> > Modern Linux should generally get exactly the states it requests.
> > In particular, when a CPU is taken off-line, it must not be demoted, else
> > it can prevent the entire package from reaching deep C-states.
> > 
> > https://bugzilla.kernel.org/show_bug.cgi?id=25252
> > 
> >  
> > +#define MSR_NHM_SNB_PKG_CST_CFG_CTL	0x000000e2
> > +#define NHM_C3_AUTO_DEMOTE		(1UL << 25)
> > +#define NHM_C1_AUTO_DEMOTE		(1UL << 26)
> > +
> ....
> > @@ -85,6 +86,12 @@ static int intel_idle(struct cpuidle_dev
> >  static struct cpuidle_state *cpuidle_state_table;
> >  
> >  /*
> > + * Hardware C-state auto-demotion may not always be optimal.
> > + * Indicate which enable bits to clear here.
> > + */
> > +static unsigned long long auto_demotion_disable_flags;
> 
> Why long long here, but long above?

long long here because MSR accesses are 64-bits, even on
32-bit builds.

UL above because it matches the style of the neighboring code.
The "UL" is purely cosmetic, of course.  Same code is generated
if it were "ULL" or left off entirely; as the LHS is 64-bit.

cheers,
Len Brown, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion
  2011-04-08 22:31   ` Len Brown
@ 2011-04-15 16:25     ` Pavel Machek
  0 siblings, 0 replies; 11+ messages in thread
From: Pavel Machek @ 2011-04-15 16:25 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-pm, stable

Hi!

> > > @@ -85,6 +86,12 @@ static int intel_idle(struct cpuidle_dev
> > >  static struct cpuidle_state *cpuidle_state_table;
> > >  
> > >  /*
> > > + * Hardware C-state auto-demotion may not always be optimal.
> > > + * Indicate which enable bits to clear here.
> > > + */
> > > +static unsigned long long auto_demotion_disable_flags;
> > 
> > Why long long here, but long above?
> 
> long long here because MSR accesses are 64-bits, even on
> 32-bit builds.
> 
> UL above because it matches the style of the neighboring code.
> The "UL" is purely cosmetic, of course.  Same code is generated
> if it were "ULL" or left off entirely; as the LHS is 64-bit.

Normally, if register is always 64bit, it should be u64.

And consistency should not be a reason to add misleading postfixes...
								Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-04-15 16:25 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-23  2:24 [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM HW C-state auto-demotion Len Brown
2011-03-23  2:26 ` [PATCH 2/2 2.6.37.stable] intel_idle: disable Atom/Lincroft " Len Brown
2011-03-23 22:55   ` [stable] " Greg KH
2011-03-23 22:54 ` [stable] [PATCH 1/2 2.6.37.stable] intel_idle: disable NHM/WSM " Greg KH
     [not found] ` <20110323225420.GE27334@kroah.com>
2011-03-24  2:53   ` Len Brown
2011-03-24  3:39     ` Greg KH
2011-04-08 13:16     ` Pavel Machek
2011-04-08 16:14       ` Len Brown
2011-04-08 13:16 ` Pavel Machek
2011-04-08 22:31   ` Len Brown
2011-04-15 16:25     ` Pavel Machek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.