Kernel KVM-PPC virtualization development
 help / color / mirror / Atom feed
From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
To: kvm-ppc@vger.kernel.org
Subject: Re: [kvm-ppc-devel] [PATCH 1 of 2] Add idle power save for ppc 4xx
Date: Thu, 03 Apr 2008 08:19:12 +0000	[thread overview]
Message-ID: <47F49300.80302@linux.vnet.ibm.com> (raw)
In-Reply-To: <15675e59e019c4800a83.1206968273@thinkpadL>

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

  parent reply	other threads:[~2008-04-03  8:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Christian Ehrhardt [this message]
2008-04-03 19:35 ` Jerone Young

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47F49300.80302@linux.vnet.ibm.com \
    --to=ehrhardt@linux.vnet.ibm.com \
    --cc=kvm-ppc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox