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 <pranavkumar@xxxxxxxxxx> Signed-off-by: Anup Patel <anup.patel@xxxxxxxxxx> --- 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 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm