* [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