All of lore.kernel.org
 help / color / mirror / Atom feed
From: christoffer.dall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v10 11/12] ARM/ARM64: KVM: Emulate PSCI v0.2 CPU_SUSPEND
Date: Mon, 28 Apr 2014 07:23:29 -0700	[thread overview]
Message-ID: <20140428142329.GH2868@lvm> (raw)
In-Reply-To: <1398085206-30555-12-git-send-email-anup.patel@linaro.org>

On Mon, Apr 21, 2014 at 06:30:05PM +0530, Anup Patel wrote:
> This patch adds emulation of PSCI v0.2 CPU_SUSPEND function call for
> KVM ARM/ARM64. This is a CPU-level function call which can suspend
> current CPU or current CPU cluster. We don't have VCPU clusters in
> KVM so we only suspend the current VCPU.
> 
> The CPU_SUSPEND emulation is not tested much because currently there
> is no CPUIDLE driver in Linux kernel that uses PSCI CPU_SUSPEND. The
> PSCI CPU_SUSPEND implementation in ARM64 kernel was tested using a
> Simple CPUIDLE driver which is not published due to unstable DT-bindings
> for PSCI.
> (For more info, http://lwn.net/Articles/574950/)
> 
> For simplicity, we implement CPU_SUSPEND emulation similar to WFI
> (Wait-for-interrupt) emulation and we also treat power-down request
> to be same as stand-by request. This is consistent with section
> 5.4.1 and section 5.4.2 of PSCI v0.2 specification.
> 
> Signed-off-by: Anup Patel <anup.patel@linaro.org>
> Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
> ---
>  arch/arm/kvm/psci.c |   28 ++++++++++++++++++++++++----
>  1 file changed, 24 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c
> index b582e99..757e506 100644
> --- a/arch/arm/kvm/psci.c
> +++ b/arch/arm/kvm/psci.c
> @@ -37,6 +37,26 @@ static unsigned long psci_affinity_mask(unsigned long affinity_level)
>  	return 0;
>  }
>  
> +static unsigned long kvm_psci_vcpu_suspend(struct kvm_vcpu *vcpu)
> +{
> +	/*
> +	 * NOTE: For simplicity, we make VCPU suspend emulation to be
> +	 * same-as WFI (Wait-for-interrupt) emulation.
> +	 *
> +	 * This means for KVM the wakeup events are interrupts and
> +	 * this is consistent with intended use of StateID as described
> +	 * in section 5.4.1 of PSCI v0.2 specification (ARM DEN 0022A).
> +	 *
> +	 * Further, we also treat power-down request to be same as
> +	 * stand-by request as-per section 5.4.2 clause 3 of PSCI v0.2
> +	 * specification (ARM DEN 0022A). This means all suspend states
> +	 * for KVM will preserve the register state.
> +	 */
> +	kvm_vcpu_block(vcpu);
> +
> +	return PSCI_RET_SUCCESS;
> +}
> +
>  static void kvm_psci_vcpu_off(struct kvm_vcpu *vcpu)
>  {
>  	vcpu->arch.pause = true;
> @@ -183,6 +203,10 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
>  		 */
>  		val = 2;
>  		break;
> +	case PSCI_0_2_FN_CPU_SUSPEND:
> +	case PSCI_0_2_FN64_CPU_SUSPEND:
> +		val = kvm_psci_vcpu_suspend(vcpu);
> +		break;
>  	case PSCI_0_2_FN_CPU_OFF:
>  		kvm_psci_vcpu_off(vcpu);
>  		val = PSCI_RET_SUCCESS;
> @@ -221,10 +245,6 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
>  		val = PSCI_RET_INTERNAL_FAILURE;
>  		ret = 0;
>  		break;
> -	case PSCI_0_2_FN_CPU_SUSPEND:
> -	case PSCI_0_2_FN64_CPU_SUSPEND:
> -		val = PSCI_RET_NOT_SUPPORTED;
> -		break;
>  	default:
>  		return -EINVAL;
>  	}
> -- 
> 1.7.9.5
> 
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>

WARNING: multiple messages have this Message-ID (diff)
From: Christoffer Dall <christoffer.dall@linaro.org>
To: Anup Patel <anup.patel@linaro.org>
Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linaro-kernel@lists.linaro.org, patches@apm.com,
	Marc Zyngier <Marc.Zyngier@arm.com>,
	Rob Herring <rob.herring@linaro.org>,
	Pranavkumar Sawargaonkar <pranavkumar@linaro.org>,
	Ashwin Chaugule <ashwin.chaugule@linaro.org>
Subject: Re: [PATCH v10 11/12] ARM/ARM64: KVM: Emulate PSCI v0.2 CPU_SUSPEND
Date: Mon, 28 Apr 2014 07:23:29 -0700	[thread overview]
Message-ID: <20140428142329.GH2868@lvm> (raw)
In-Reply-To: <1398085206-30555-12-git-send-email-anup.patel@linaro.org>

On Mon, Apr 21, 2014 at 06:30:05PM +0530, Anup Patel wrote:
> This patch adds emulation of PSCI v0.2 CPU_SUSPEND function call for
> KVM ARM/ARM64. This is a CPU-level function call which can suspend
> current CPU or current CPU cluster. We don't have VCPU clusters in
> KVM so we only suspend the current VCPU.
> 
> The CPU_SUSPEND emulation is not tested much because currently there
> is no CPUIDLE driver in Linux kernel that uses PSCI CPU_SUSPEND. The
> PSCI CPU_SUSPEND implementation in ARM64 kernel was tested using a
> Simple CPUIDLE driver which is not published due to unstable DT-bindings
> for PSCI.
> (For more info, http://lwn.net/Articles/574950/)
> 
> For simplicity, we implement CPU_SUSPEND emulation similar to WFI
> (Wait-for-interrupt) emulation and we also treat power-down request
> to be same as stand-by request. This is consistent with section
> 5.4.1 and section 5.4.2 of PSCI v0.2 specification.
> 
> Signed-off-by: Anup Patel <anup.patel@linaro.org>
> Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
> ---
>  arch/arm/kvm/psci.c |   28 ++++++++++++++++++++++++----
>  1 file changed, 24 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c
> index b582e99..757e506 100644
> --- a/arch/arm/kvm/psci.c
> +++ b/arch/arm/kvm/psci.c
> @@ -37,6 +37,26 @@ static unsigned long psci_affinity_mask(unsigned long affinity_level)
>  	return 0;
>  }
>  
> +static unsigned long kvm_psci_vcpu_suspend(struct kvm_vcpu *vcpu)
> +{
> +	/*
> +	 * NOTE: For simplicity, we make VCPU suspend emulation to be
> +	 * same-as WFI (Wait-for-interrupt) emulation.
> +	 *
> +	 * This means for KVM the wakeup events are interrupts and
> +	 * this is consistent with intended use of StateID as described
> +	 * in section 5.4.1 of PSCI v0.2 specification (ARM DEN 0022A).
> +	 *
> +	 * Further, we also treat power-down request to be same as
> +	 * stand-by request as-per section 5.4.2 clause 3 of PSCI v0.2
> +	 * specification (ARM DEN 0022A). This means all suspend states
> +	 * for KVM will preserve the register state.
> +	 */
> +	kvm_vcpu_block(vcpu);
> +
> +	return PSCI_RET_SUCCESS;
> +}
> +
>  static void kvm_psci_vcpu_off(struct kvm_vcpu *vcpu)
>  {
>  	vcpu->arch.pause = true;
> @@ -183,6 +203,10 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
>  		 */
>  		val = 2;
>  		break;
> +	case PSCI_0_2_FN_CPU_SUSPEND:
> +	case PSCI_0_2_FN64_CPU_SUSPEND:
> +		val = kvm_psci_vcpu_suspend(vcpu);
> +		break;
>  	case PSCI_0_2_FN_CPU_OFF:
>  		kvm_psci_vcpu_off(vcpu);
>  		val = PSCI_RET_SUCCESS;
> @@ -221,10 +245,6 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
>  		val = PSCI_RET_INTERNAL_FAILURE;
>  		ret = 0;
>  		break;
> -	case PSCI_0_2_FN_CPU_SUSPEND:
> -	case PSCI_0_2_FN64_CPU_SUSPEND:
> -		val = PSCI_RET_NOT_SUPPORTED;
> -		break;
>  	default:
>  		return -EINVAL;
>  	}
> -- 
> 1.7.9.5
> 
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>

  reply	other threads:[~2014-04-28 14:23 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-21 12:59 [PATCH v10 00/12] In-kernel PSCI v0.2 emulation for KVM ARM/ARM64 Anup Patel
2014-04-21 12:59 ` Anup Patel
2014-04-21 12:59 ` [PATCH v10 01/12] KVM: Add capability to advertise PSCI v0.2 support Anup Patel
2014-04-21 12:59   ` Anup Patel
2014-04-21 12:59 ` [PATCH v10 02/12] ARM/ARM64: KVM: Add common header for PSCI related defines Anup Patel
2014-04-21 12:59   ` Anup Patel
2014-04-28 14:16   ` Christoffer Dall
2014-04-28 14:16     ` Christoffer Dall
2014-04-28 17:13     ` Anup Patel
2014-04-28 17:13       ` Anup Patel
2014-04-28 17:19       ` Ashwin Chaugule
2014-04-28 17:19         ` Ashwin Chaugule
2014-04-21 12:59 ` [PATCH v10 03/12] ARM/ARM64: KVM: Add base for PSCI v0.2 emulation Anup Patel
2014-04-21 12:59   ` Anup Patel
2014-04-21 12:59 ` [PATCH v10 04/12] KVM: Documentation: Add info regarding KVM_ARM_VCPU_PSCI_0_2 feature Anup Patel
2014-04-21 12:59   ` Anup Patel
2014-04-21 12:59 ` [PATCH v10 05/12] ARM/ARM64: KVM: Make kvm_psci_call() return convention more flexible Anup Patel
2014-04-21 12:59   ` Anup Patel
2014-04-28 14:17   ` Christoffer Dall
2014-04-28 14:17     ` Christoffer Dall
2014-04-28 14:27     ` Marc Zyngier
2014-04-28 14:27       ` Marc Zyngier
2014-04-21 13:00 ` [PATCH v10 06/12] KVM: Add KVM_EXIT_SYSTEM_EVENT to user space API header Anup Patel
2014-04-21 13:00   ` Anup Patel
2014-04-21 13:00 ` [PATCH v10 07/12] ARM/ARM64: KVM: Emulate PSCI v0.2 SYSTEM_OFF and SYSTEM_RESET Anup Patel
2014-04-21 13:00   ` Anup Patel
2014-04-28 14:34   ` Marc Zyngier
2014-04-28 14:34     ` Marc Zyngier
2014-04-28 17:04     ` Anup Patel
2014-04-28 17:04       ` Anup Patel
2014-04-21 13:00 ` [PATCH v10 08/12] ARM/ARM64: KVM: Emulate PSCI v0.2 AFFINITY_INFO Anup Patel
2014-04-21 13:00   ` Anup Patel
2014-04-28 14:35   ` Marc Zyngier
2014-04-28 14:35     ` Marc Zyngier
2014-04-21 13:00 ` [PATCH v10 09/12] ARM/ARM64: KVM: Emulate PSCI v0.2 MIGRATE_INFO_TYPE and related functions Anup Patel
2014-04-21 13:00   ` Anup Patel
2014-04-21 13:00 ` [PATCH v10 10/12] ARM/ARM64: KVM: Fix CPU_ON emulation for PSCI v0.2 Anup Patel
2014-04-21 13:00   ` Anup Patel
2014-04-21 13:00 ` [PATCH v10 11/12] ARM/ARM64: KVM: Emulate PSCI v0.2 CPU_SUSPEND Anup Patel
2014-04-21 13:00   ` Anup Patel
2014-04-28 14:23   ` Christoffer Dall [this message]
2014-04-28 14:23     ` Christoffer Dall
2014-04-28 14:40   ` Marc Zyngier
2014-04-28 14:40     ` Marc Zyngier
2014-04-21 13:00 ` [PATCH v10 12/12] ARM/ARM64: KVM: Advertise KVM_CAP_ARM_PSCI_0_2 to user space Anup Patel
2014-04-21 13:00   ` Anup Patel

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=20140428142329.GH2868@lvm \
    --to=christoffer.dall@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.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 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.