From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerone Young Date: Wed, 02 Apr 2008 17:09:40 +0000 Subject: Re: [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc Message-Id: <1207156180.9783.13.camel@thinkpadL> List-Id: References: <15675e59e019c4800a83.1206968273@thinkpadL> In-Reply-To: <15675e59e019c4800a83.1206968273@thinkpadL> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ppc@vger.kernel.org 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 > > # 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 > > > > 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 > > + * > > + * 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 > > +#include > > + > > +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