* [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx
@ 2008-03-31 12:57 Jerone Young
2008-04-02 7:52 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Jerone Young @ 2008-03-31 12:57 UTC (permalink / raw)
To: kvm-ppc
# HG changeset patch
# User Jerone Young <jyoung5@us.ibm.com>
# Date 1206933796 18000
# Node ID 15675e59e019c4800a834ae79090d92b07f1d0ce
# Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
Add idle power save for ppc 4xx
This patch sets the wait state MSR when power_save is called in cpu_idle loop for ppc4xx. This is mainly to help out virtualization solutions such as KVM. This way the virtualization soultions are able to tell if the guest kernel is idle.
Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
+obj-$(CONFIG_4xx) += idle_4xx.o
obj-$(CONFIG_TAU) += tau_6xx.o
obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
swsusp_$(CONFIG_WORD_SIZE).o
diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/idle_4xx.c
new file mode 100644
--- /dev/null
+++ b/arch/powerpc/kernel/idle_4xx.c
@@ -0,0 +1,24 @@
+/*
+ * This file contains the power_save function for 4xx CPUs
+ *
+ * added by Jerone Young <jyoung5@us.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <asm/processor.h>
+#include <asm/machdep.h>
+
+void ppc4xx_idle()
+{
+ unsigned long msr_save;
+
+ /* set wait state MSR */
+ local_irq_enable();
+ msr_save = mfmsr();
+ mtmsr(msr_save|MSR_WE);
+ local_irq_disable();
+}
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
ppc_md.power_save = ppc6xx_idle;
+#endif
+
+#ifdef CONFIG_4xx
+ ppc_md.power_save = ppc4xx_idle;
#endif
if (ppc_md.progress)
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h
--- a/include/asm-powerpc/machdep.h
+++ b/include/asm-powerpc/machdep.h
@@ -266,6 +266,7 @@ extern void power4_idle(void);
extern void power4_idle(void);
extern void power4_cpu_offline_powersave(void);
extern void ppc6xx_idle(void);
+extern void ppc4xx_idle(void);
/*
* ppc_md contains a copy of the machine description structure for the
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
@ 2008-04-02 7:52 ` Jerone Young
2008-04-02 12:14 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jimi Xenidis
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jerone Young @ 2008-04-02 7:52 UTC (permalink / raw)
To: kvm-ppc
# HG changeset patch
# User Jerone Young <jyoung5@us.ibm.com>
# Date 1207122427 18000
# Node ID 6e9ae9e1e5992339ca1f3efa93f8200cf24cbee5
# Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
Add idle power save for ppc 4xx for 2.6.25
This patch sets the wait state MSR when power_save is called in cpu_idle loop for ppc4xx. This is mainly to help out virtualization solutions such as KVM. This way the virtualization soultions are able to tell if the guest kernel is idle.
I have tested this on hardware & KVM virtual guest.
The issue though is this is a temporary patch. As the one that will be sent upstream is based on linux-next (2.6.26) and is not the same as the 2.6.25 patch.
Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
+obj-$(CONFIG_4xx) += idle_4xx.o
obj-$(CONFIG_TAU) += tau_6xx.o
obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
swsusp_$(CONFIG_WORD_SIZE).o
diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/idle_4xx.c
new file mode 100644
--- /dev/null
+++ b/arch/powerpc/kernel/idle_4xx.c
@@ -0,0 +1,22 @@
+/*
+ * This file contains the power_save function for 4xx CPUs
+ *
+ * added by Jerone Young <jyoung5@us.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <asm/processor.h>
+#include <asm/machdep.h>
+
+void ppc4xx_idle(void)
+{
+ unsigned long msr_save;
+
+ /* set wait state MSR */
+ msr_save = mfmsr();
+ mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE);
+}
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
ppc_md.power_save = ppc6xx_idle;
+#endif
+
+#ifdef CONFIG_4xx
+ ppc_md.power_save = ppc4xx_idle;
#endif
if (ppc_md.progress)
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h
--- a/include/asm-powerpc/machdep.h
+++ b/include/asm-powerpc/machdep.h
@@ -266,6 +266,7 @@ extern void power4_idle(void);
extern void power4_idle(void);
extern void power4_cpu_offline_powersave(void);
extern void ppc6xx_idle(void);
+extern void ppc4xx_idle(void);
/*
* ppc_md contains a copy of the machine description structure for the
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
2008-04-02 7:52 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
@ 2008-04-02 12:14 ` Jimi Xenidis
2008-04-02 17:09 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc Jerone Young
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jimi Xenidis @ 2008-04-02 12:14 UTC (permalink / raw)
To: kvm-ppc
On Apr 2, 2008, at 3:52 AM, Jerone Young wrote:
> # HG changeset patch
> # User Jerone Young <jyoung5@us.ibm.com>
> # Date 1207122427 18000
> # Node ID 6e9ae9e1e5992339ca1f3efa93f8200cf24cbee5
> # Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
> Add idle power save for ppc 4xx for 2.6.25
>
> This patch sets the wait state MSR when power_save is called in
> cpu_idle loop for ppc4xx. This is mainly to help out virtualization
> solutions such as KVM. This way the virtualization soultions are
> able to tell if the guest kernel is idle.
>
> I have tested this on hardware & KVM virtual guest.
>
> The issue though is this is a temporary patch. As the one that will
> be sent upstream is based on linux-next (2.6.26) and is not the
> same as the 2.6.25 patch.
>
> Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
>
> diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/
> Makefile
> --- a/arch/powerpc/kernel/Makefile
> +++ b/arch/powerpc/kernel/Makefile
> @@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
> obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
> obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
> obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
> +obj-$(CONFIG_4xx) += idle_4xx.o
> obj-$(CONFIG_TAU) += tau_6xx.o
> obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
> swsusp_$(CONFIG_WORD_SIZE).o
> diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/
> idle_4xx.c
> new file mode 100644
> --- /dev/null
> +++ b/arch/powerpc/kernel/idle_4xx.c
> @@ -0,0 +1,22 @@
> +/*
> + * This file contains the power_save function for 4xx CPUs
> + *
> + * added by Jerone Young <jyoung5@us.ibm.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version
> + * 2 of the License, or (at your option) any later version.
> + */
> +
> +#include <asm/processor.h>
> +#include <asm/machdep.h>
> +
> +void ppc4xx_idle(void)
> +{
> + unsigned long msr_save;
> +
> + /* set wait state MSR */
> + msr_save = mfmsr();
> + mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE);
1) I think you also want MSR_DE here, no?
2) Just to be safe, I'd also append an isync();
3) In case MSR_WE does nothing, or continues from here I'd append
"mstmsr(msr_save); isync();" as well
-JX
> +}
> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/
> setup_32.c
> --- a/arch/powerpc/kernel/setup_32.c
> +++ b/arch/powerpc/kernel/setup_32.c
> @@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
> if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
> cpu_has_feature(CPU_FTR_CAN_NAP))
> ppc_md.power_save = ppc6xx_idle;
> +#endif
> +
> +#ifdef CONFIG_4xx
> + ppc_md.power_save = ppc4xx_idle;
> #endif
>
> if (ppc_md.progress)
> diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/
> machdep.h
> --- a/include/asm-powerpc/machdep.h
> +++ b/include/asm-powerpc/machdep.h
> @@ -266,6 +266,7 @@ extern void power4_idle(void);
> extern void power4_idle(void);
> extern void power4_cpu_offline_powersave(void);
> extern void ppc6xx_idle(void);
> +extern void ppc4xx_idle(void);
>
> /*
> * ppc_md contains a copy of the machine description structure for
> the
>
> ----------------------------------------------------------------------
> ---
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/
> marketplace
> _______________________________________________
> kvm-ppc-devel mailing list
> kvm-ppc-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
2008-04-02 7:52 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
2008-04-02 12:14 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jimi Xenidis
@ 2008-04-02 17:09 ` Jerone Young
2008-04-02 18:07 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jerone Young @ 2008-04-02 17:09 UTC (permalink / raw)
To: kvm-ppc
On Wed, 2008-04-02 at 08:14 -0400, Jimi Xenidis wrote:
> On Apr 2, 2008, at 3:52 AM, Jerone Young wrote:
>
> > # HG changeset patch
> > # User Jerone Young <jyoung5@us.ibm.com>
> > # Date 1207122427 18000
> > # Node ID 6e9ae9e1e5992339ca1f3efa93f8200cf24cbee5
> > # Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
> > Add idle power save for ppc 4xx for 2.6.25
> >
> > This patch sets the wait state MSR when power_save is called in
> > cpu_idle loop for ppc4xx. This is mainly to help out virtualization
> > solutions such as KVM. This way the virtualization soultions are
> > able to tell if the guest kernel is idle.
> >
> > I have tested this on hardware & KVM virtual guest.
> >
> > The issue though is this is a temporary patch. As the one that will
> > be sent upstream is based on linux-next (2.6.26) and is not the
> > same as the 2.6.25 patch.
> >
> > Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
> >
> > diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/
> > Makefile
> > --- a/arch/powerpc/kernel/Makefile
> > +++ b/arch/powerpc/kernel/Makefile
> > @@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
> > obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
> > obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
> > obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
> > +obj-$(CONFIG_4xx) += idle_4xx.o
> > obj-$(CONFIG_TAU) += tau_6xx.o
> > obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
> > swsusp_$(CONFIG_WORD_SIZE).o
> > diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/
> > idle_4xx.c
> > new file mode 100644
> > --- /dev/null
> > +++ b/arch/powerpc/kernel/idle_4xx.c
> > @@ -0,0 +1,22 @@
> > +/*
> > + * This file contains the power_save function for 4xx CPUs
> > + *
> > + * added by Jerone Young <jyoung5@us.ibm.com>
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License
> > + * as published by the Free Software Foundation; either version
> > + * 2 of the License, or (at your option) any later version.
> > + */
> > +
> > +#include <asm/processor.h>
> > +#include <asm/machdep.h>
> > +
> > +void ppc4xx_idle(void)
> > +{
> > + unsigned long msr_save;
> > +
> > + /* set wait state MSR */
> > + msr_save = mfmsr();
> > + mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE);
>
> 1) I think you also want MSR_DE here, no?
> 2) Just to be safe, I'd also append an isync();
> 3) In case MSR_WE does nothing, or continues from here I'd append
> "mstmsr(msr_save); isync();" as well
Looks like using local_irq_enable() just might have been a better idea
after all.
So the MSR_DE is yet another case that could go here. If it was on
coming into power_save...I'm assuming it would get disabled by
local_irq_disable().
Looks like using isync after the mtmsr looks to be a good safety net.
>
> -JX
>
>
>
> > +}
> > diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/
> > setup_32.c
> > --- a/arch/powerpc/kernel/setup_32.c
> > +++ b/arch/powerpc/kernel/setup_32.c
> > @@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
> > if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
> > cpu_has_feature(CPU_FTR_CAN_NAP))
> > ppc_md.power_save = ppc6xx_idle;
> > +#endif
> > +
> > +#ifdef CONFIG_4xx
> > + ppc_md.power_save = ppc4xx_idle;
> > #endif
> >
> > if (ppc_md.progress)
> > diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/
> > machdep.h
> > --- a/include/asm-powerpc/machdep.h
> > +++ b/include/asm-powerpc/machdep.h
> > @@ -266,6 +266,7 @@ extern void power4_idle(void);
> > extern void power4_idle(void);
> > extern void power4_cpu_offline_powersave(void);
> > extern void ppc6xx_idle(void);
> > +extern void ppc4xx_idle(void);
> >
> > /*
> > * ppc_md contains a copy of the machine description structure for
> > the
> >
> > ----------------------------------------------------------------------
> > ---
> > Check out the new SourceForge.net Marketplace.
> > It's the best place to buy or sell services for
> > just about anything Open Source.
> > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/
> > marketplace
> > _______________________________________________
> > kvm-ppc-devel mailing list
> > kvm-ppc-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
>
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
` (2 preceding siblings ...)
2008-04-02 17:09 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc Jerone Young
@ 2008-04-02 18:07 ` Jerone Young
2008-04-03 8:19 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Christian Ehrhardt
2008-04-03 19:35 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
5 siblings, 0 replies; 7+ messages in thread
From: Jerone Young @ 2008-04-02 18:07 UTC (permalink / raw)
To: kvm-ppc
# HG changeset patch
# User Jerone Young <jyoung5@us.ibm.com>
# Date 1207159627 18000
# Node ID 007c135cb5f14f5eb025c103623c2ebfcc76ab11
# Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
Add idle power save for ppc 4xx for 2.6.25
This patch sets the wait state MSR when power_save is called in cpu_idle loop for ppc4xx. This is mainly to help out virtualization solutions such as KVM. This way the virtualization soultions are able to tell if the guest kernel is idle.
I have tested this on hardware & KVM virtual guest.
The issue though is this is a temporary patch. As the one that will be sent upstream is based on linux-next (2.6.26) and is not the same as the 2.6.25 patch.
Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
+obj-$(CONFIG_4xx) += idle_4xx.o
obj-$(CONFIG_TAU) += tau_6xx.o
obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
swsusp_$(CONFIG_WORD_SIZE).o
diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/idle_4xx.c
new file mode 100644
--- /dev/null
+++ b/arch/powerpc/kernel/idle_4xx.c
@@ -0,0 +1,24 @@
+/*
+ * This file contains the power_save function for 4xx CPUs
+ *
+ * Copyright 2008 IBM Corporation.
+ * added by Jerone Young <jyoung5@us.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <asm/processor.h>
+#include <asm/machdep.h>
+
+void ppc4xx_idle(void)
+{
+ unsigned long msr_save;
+
+ /* set wait state MSR */
+ msr_save = mfmsr();
+ mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE);
+ isync();
+}
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
ppc_md.power_save = ppc6xx_idle;
+#endif
+
+#ifdef CONFIG_4xx
+ ppc_md.power_save = ppc4xx_idle;
#endif
if (ppc_md.progress)
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h
--- a/include/asm-powerpc/machdep.h
+++ b/include/asm-powerpc/machdep.h
@@ -266,6 +266,7 @@ extern void power4_idle(void);
extern void power4_idle(void);
extern void power4_cpu_offline_powersave(void);
extern void ppc6xx_idle(void);
+extern void ppc4xx_idle(void);
/*
* ppc_md contains a copy of the machine description structure for the
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
` (3 preceding siblings ...)
2008-04-02 18:07 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
@ 2008-04-03 8:19 ` Christian Ehrhardt
2008-04-03 19:35 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
5 siblings, 0 replies; 7+ messages in thread
From: Christian Ehrhardt @ 2008-04-03 8:19 UTC (permalink / raw)
To: kvm-ppc
Jerone Young wrote:
> # HG changeset patch
> # User Jerone Young <jyoung5@us.ibm.com>
> # Date 1207159627 18000
> # Node ID 007c135cb5f14f5eb025c103623c2ebfcc76ab11
> # Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
> Add idle power save for ppc 4xx for 2.6.25
>
> This patch sets the wait state MSR when power_save is called in cpu_idle loop for ppc4xx. This is mainly to help out virtualization solutions such as KVM. This way the virtualization soultions are able to tell if the guest kernel is idle.
>
> I have tested this on hardware & KVM virtual guest.
>
> The issue though is this is a temporary patch. As the one that will be sent upstream is based on linux-next (2.6.26) and is not the same as the 2.6.25 patch.
>
> Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
>
> diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
> --- a/arch/powerpc/kernel/Makefile
> +++ b/arch/powerpc/kernel/Makefile
> @@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
> obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
> obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
> obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
> +obj-$(CONFIG_4xx) += idle_4xx.o
> obj-$(CONFIG_TAU) += tau_6xx.o
> obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
> swsusp_$(CONFIG_WORD_SIZE).o
> diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/idle_4xx.c
> new file mode 100644
> --- /dev/null
> +++ b/arch/powerpc/kernel/idle_4xx.c
> @@ -0,0 +1,24 @@
> +/*
> + * This file contains the power_save function for 4xx CPUs
> + *
> + * Copyright 2008 IBM Corporation.
> + * added by Jerone Young <jyoung5@us.ibm.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version
> + * 2 of the License, or (at your option) any later version.
> + */
> +
> +#include <asm/processor.h>
> +#include <asm/machdep.h>
> +
> +void ppc4xx_idle(void)
> +{
> + unsigned long msr_save;
> +
> + /* set wait state MSR */
> + msr_save = mfmsr();
> + mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE);
> + isync();
> +}
I think Jimi's comment #3 is still worth to be considered:
3) In case MSR_WE does nothing, or continues from here I'd append
"mstmsr(msr_save); isync();" as well
And another comment that was from Arnd Bergmann into the same direction:
[...] if only to make the function return with the same state that it was entered.
wich would then be something like
> +void ppc4xx_idle(void)
> +{
> + unsigned long msr_save;
> +
> + /* set wait state MSR */
> + msr_save = mfmsr();
> + mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE);
> + isync();
-> mtspr(msr_save);
-> isync();
> +}
I think it's more correct to leave as we enter.
btw - Hollis was faster, but I wanted to add for the kvm kernel part I also think placing it in emulate_instruction would save checks on every exit.
> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
> --- a/arch/powerpc/kernel/setup_32.c
> +++ b/arch/powerpc/kernel/setup_32.c
> @@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
> if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
> cpu_has_feature(CPU_FTR_CAN_NAP))
> ppc_md.power_save = ppc6xx_idle;
> +#endif
> +
> +#ifdef CONFIG_4xx
> + ppc_md.power_save = ppc4xx_idle;
> #endif
>
> if (ppc_md.progress)
> diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h
> --- a/include/asm-powerpc/machdep.h
> +++ b/include/asm-powerpc/machdep.h
> @@ -266,6 +266,7 @@ extern void power4_idle(void);
> extern void power4_idle(void);
> extern void power4_cpu_offline_powersave(void);
> extern void ppc6xx_idle(void);
> +extern void ppc4xx_idle(void);
>
> /*
> * ppc_md contains a copy of the machine description structure for the
>
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
> _______________________________________________
> kvm-ppc-devel mailing list
> kvm-ppc-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
--
Grüsse / regards,
Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
` (4 preceding siblings ...)
2008-04-03 8:19 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Christian Ehrhardt
@ 2008-04-03 19:35 ` Jerone Young
5 siblings, 0 replies; 7+ messages in thread
From: Jerone Young @ 2008-04-03 19:35 UTC (permalink / raw)
To: kvm-ppc
# HG changeset patch
# User Jerone Young <jyoung5@us.ibm.com>
# Date 1207250239 18000
# Node ID b7794c1fa50b531c9b84382c3f3d9a5466d86c0d
# Parent 1506aa38ddabb0bf73fff3ac3f3db5f9ef6458cc
Add idle power save for ppc 4xx for 2.6.25
This patch sets the wait state MSR when power_save is called in cpu_idle loop for ppc4xx. This is mainly to help out virtualization solutions such as KVM. This way the virtualization soultions are able to tell if the guest kernel is idle.
I have tested this on hardware & KVM virtual guest.
The issue though is this is a temporary patch. As the one that will be sent upstream is based on linux-next (2.6.26) and is not the same as the 2.6.25 patch.
Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -39,6 +39,7 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsy
obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
+obj-$(CONFIG_4xx) += idle_4xx.o
obj-$(CONFIG_TAU) += tau_6xx.o
obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
swsusp_$(CONFIG_WORD_SIZE).o
diff --git a/arch/powerpc/kernel/idle_4xx.c b/arch/powerpc/kernel/idle_4xx.c
new file mode 100644
--- /dev/null
+++ b/arch/powerpc/kernel/idle_4xx.c
@@ -0,0 +1,23 @@
+/*
+ * This file contains the power_save function for 4xx CPUs
+ *
+ * Copyright 2008 IBM Corporation.
+ * added by Jerone Young <jyoung5@us.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <asm/processor.h>
+#include <asm/machdep.h>
+
+void ppc4xx_idle(void)
+{
+ unsigned long msr_save;
+
+ /* set wait state MSR */
+ msr_save = mfmsr();
+ mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE);
+}
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -132,6 +132,10 @@ void __init machine_init(unsigned long d
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
ppc_md.power_save = ppc6xx_idle;
+#endif
+
+#ifdef CONFIG_4xx
+ ppc_md.power_save = ppc4xx_idle;
#endif
if (ppc_md.progress)
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h
--- a/include/asm-powerpc/machdep.h
+++ b/include/asm-powerpc/machdep.h
@@ -266,6 +266,7 @@ extern void power4_idle(void);
extern void power4_idle(void);
extern void power4_cpu_offline_powersave(void);
extern void ppc6xx_idle(void);
+extern void ppc4xx_idle(void);
/*
* ppc_md contains a copy of the machine description structure for the
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
kvm-ppc-devel mailing list
kvm-ppc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-04-03 19:35 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-31 12:57 [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jerone Young
2008-04-02 7:52 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
2008-04-02 12:14 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Jimi Xenidis
2008-04-02 17:09 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc Jerone Young
2008-04-02 18:07 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
2008-04-03 8:19 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx Christian Ehrhardt
2008-04-03 19:35 ` [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx for Jerone Young
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.