Re: [Qemu-devel] [RFC PATCH 5/7] target-arm: Enable KVM_ARM_VCPU_PSCI_0_2 feature when possible
[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
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
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