Re: [Qemu-devel] [RFC PATCH 5/7] target-arm: Enable KVM_ARM_VCPU_PSCI_0_2 feature when possible

2014-03-17 Thread Peter Maydell
[another resend for qemu-devel...]

On 27 February 2014 07:16, Pranavkumar Sawargaonkar
pranavku...@linaro.org wrote:
 On 27 February 2014 12:21, Pranavkumar Sawargaonkar
 pranavku...@linaro.org wrote:
 Latest linux kernel supports in-kernel emulation of PSCI v0.2 but
 to enable it we need to select KVM_ARM_VCPU_PSCI_0_2 feature using
 KVM_ARM_VCPU_INIT ioctl.

 Also, we can use KVM_ARM_VCPU_PSCI_0_2 feature for VCPU only when
 linux kernel has KVM_CAP_ARM_PSCI_0_2 capability.

 This patch updates kvm_arch_init_vcpu() to enable KVM_ARM_VCPU_PSCI_0_2
 feature for VCPU when KVM ARM/ARM64 has KVM_CAP_ARM_PSCI_0_2 capability.

I think this has implications for migration. What happens
if you migrate a VM from a host system where the host
kernel supports this capability to one where it doesn't?
(Presumably the answer is it won't work and we need
to ensure we don't allow that.)
Conversely, is it OK to migrate a guest from a host
which didn't support PSCI 0.2 to one which does? Does
that work even if the destination has PSCI 0.2 enabled
for the vCPUs, or do we need to support starting a
VM with 0.2 disabled even on 0.2-capable hosts, for
use as a migration target?

Also we still don't seem to have done anything about
migration of the PSCI CPU powerup/down state.

thanks
-- PMM



Re: [Qemu-devel] [RFC PATCH 5/7] target-arm: Enable KVM_ARM_VCPU_PSCI_0_2 feature when possible

2014-03-17 Thread Christoffer Dall
On Mon, Mar 17, 2014 at 07:35:43PM +, Peter Maydell wrote:
 [another resend for qemu-devel...]
 
 On 27 February 2014 07:16, Pranavkumar Sawargaonkar
 pranavku...@linaro.org wrote:
  On 27 February 2014 12:21, Pranavkumar Sawargaonkar
  pranavku...@linaro.org wrote:
  Latest linux kernel supports in-kernel emulation of PSCI v0.2 but
  to enable it we need to select KVM_ARM_VCPU_PSCI_0_2 feature using
  KVM_ARM_VCPU_INIT ioctl.
 
  Also, we can use KVM_ARM_VCPU_PSCI_0_2 feature for VCPU only when
  linux kernel has KVM_CAP_ARM_PSCI_0_2 capability.
 
  This patch updates kvm_arch_init_vcpu() to enable KVM_ARM_VCPU_PSCI_0_2
  feature for VCPU when KVM ARM/ARM64 has KVM_CAP_ARM_PSCI_0_2 capability.
 
 I think this has implications for migration. What happens
 if you migrate a VM from a host system where the host
 kernel supports this capability to one where it doesn't?
 (Presumably the answer is it won't work and we need
 to ensure we don't allow that.)
 Conversely, is it OK to migrate a guest from a host
 which didn't support PSCI 0.2 to one which does? Does
 that work even if the destination has PSCI 0.2 enabled
 for the vCPUs, or do we need to support starting a
 VM with 0.2 disabled even on 0.2-capable hosts, for
 use as a migration target?

The init feature should be a switch, turn 0.2 on or off, if off, we're
emulating 0.1.  If 0.2 is on, 0.1 call numbers should generate errors.

You're right, we need to fix this for migration.

 
 Also we still don't seem to have done anything about
 migration of the PSCI CPU powerup/down state.
 

We need to create a card for this in Linaro.  Thought I would deal with
it when working through migration for ARMv8.

Thanks!
-Christoffer



Re: [Qemu-devel] [RFC PATCH 5/7] target-arm: Enable KVM_ARM_VCPU_PSCI_0_2 feature when possible

2014-02-26 Thread Pranavkumar Sawargaonkar
On 27 February 2014 12:21, Pranavkumar Sawargaonkar
pranavku...@linaro.org wrote:
 Latest linux kernel supports in-kernel emulation of PSCI v0.2 but
 to enable it we need to select KVM_ARM_VCPU_PSCI_0_2 feature using
 KVM_ARM_VCPU_INIT ioctl.

 Also, we can use KVM_ARM_VCPU_PSCI_0_2 feature for VCPU only when
 linux kernel has KVM_CAP_ARM_PSCI_0_2 capability.

 This patch updates kvm_arch_init_vcpu() to enable KVM_ARM_VCPU_PSCI_0_2
 feature for VCPU when KVM ARM/ARM64 has KVM_CAP_ARM_PSCI_0_2 capability.

 Signed-off-by: Pranavkumar Sawargaonkar pranavku...@linaro.org
 Signed-off-by: Anup Patel anup.pa...@linaro.org
 ---
  target-arm/kvm32.c |5 -
  target-arm/kvm64.c |5 -
  2 files changed, 8 insertions(+), 2 deletions(-)

 diff --git a/target-arm/kvm32.c b/target-arm/kvm32.c
 index a4fde07..afeff01 100644
 --- a/target-arm/kvm32.c
 +++ b/target-arm/kvm32.c
 @@ -181,7 +181,10 @@ int kvm_arch_init_vcpu(CPUState *cs)
  init.target = cpu-kvm_target;
  memset(init.features, 0, sizeof(init.features));
  if (cpu-start_powered_off) {
 -init.features[0] = 1  KVM_ARM_VCPU_POWER_OFF;
 +init.features[0] |= 1  KVM_ARM_VCPU_POWER_OFF;
 +}
 +if (kvm_check_extension(cs-kvm_state, KVM_CAP_ARM_PSCI_0_2)) {
 +init.features[0] |= 1  KVM_ARM_VCPU_PSCI_0_2;
  }
  ret = kvm_vcpu_ioctl(cs, KVM_ARM_VCPU_INIT, init);
  if (ret) {
 diff --git a/target-arm/kvm64.c b/target-arm/kvm64.c
 index 406529f..d303046 100644
 --- a/target-arm/kvm64.c
 +++ b/target-arm/kvm64.c
 @@ -91,7 +91,10 @@ int kvm_arch_init_vcpu(CPUState *cs)
  init.target = cpu-kvm_target;
  memset(init.features, 0, sizeof(init.features));
  if (cpu-start_powered_off) {
 -init.features[0] = 1  KVM_ARM_VCPU_POWER_OFF;
 +init.features[0] |= 1  KVM_ARM_VCPU_POWER_OFF;
 +}
 +if (kvm_check_extension(cs-kvm_state, KVM_CAP_ARM_PSCI_0_2)) {
 +init.features[0] |= 1  KVM_ARM_VCPU_PSCI_0_2;
  }
  ret = kvm_vcpu_ioctl(cs, KVM_ARM_VCPU_INIT, init);

 --
 1.7.9.5


Sorry for mentioning wrong qemu devel mail id in my previous mail.
Correcting correct qemu-devel  id.

Thanks,
Pranav