Hi Peter, On 7/4/25 2:14 PM, Peter Maydell wrote: > On Wed, 2 Jul 2025 at 17:31, Eric Auger <eric.au...@redhat.com> wrote: >> From: Haibo Xu <haibo...@linaro.org> >> >> KVM_CAP_ARM_EL2 must be supported by the cpu to enable ARM_FEATURE_EL2. >> In case the host does support NV, expose the feature. >> >> Signed-off-by: Haibo Xu <haibo...@linaro.org> >> Signed-off-by: Miguel Luis <miguel.l...@oracle.com> >> Signed-off-by: Eric Auger <eric.au...@redhat.com> >> Reviewed-by: Richard Henderson <richard.hender...@linaro.org> >> >> --- >> v2 -> v3: >> - check pmu->has_el2 on kvm_arch_init_vcpu() when setting >> KVM_ARM_VCPU_HAS_EL2 feature (Peter) >> >> v1 -> v2: >> - remove isar_feature_aa64_aa32_el2 modif in target/arm/cpu.h >> [Richard] and use el2_supported in kvm_arch_init_vcpu >> --- >> target/arm/kvm.c | 16 ++++++++++++++++ >> 1 file changed, 16 insertions(+) >> >> diff --git a/target/arm/kvm.c b/target/arm/kvm.c >> index e5708e54ae..46e5f19637 100644 >> --- a/target/arm/kvm.c >> +++ b/target/arm/kvm.c >> @@ -250,6 +250,7 @@ static bool >> kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) >> */ >> int fdarray[3]; >> bool sve_supported; >> + bool el2_supported; >> bool pmu_supported = false; >> uint64_t features = 0; >> int err; >> @@ -269,6 +270,14 @@ static bool >> kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) >> init.features[0] |= 1 << KVM_ARM_VCPU_SVE; >> } >> >> + /* >> + * Ask for EL2 if supported. >> + */ >> + el2_supported = kvm_arm_el2_supported(); >> + if (el2_supported) { >> + init.features[0] |= 1 << KVM_ARM_VCPU_HAS_EL2; >> + } >> + >> /* >> * Ask for Pointer Authentication if supported, so that we get >> * the unsanitized field values for AA64ISAR1_EL1. >> @@ -422,6 +431,10 @@ static bool >> kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) >> features |= 1ULL << ARM_FEATURE_AARCH64; >> features |= 1ULL << ARM_FEATURE_GENERIC_TIMER; >> >> + if (el2_supported) { >> + features |= 1ULL << ARM_FEATURE_EL2; >> + } >> + >> ahcf->features = features; >> >> return true; >> @@ -1887,6 +1900,9 @@ int kvm_arch_init_vcpu(CPUState *cs) >> cpu->kvm_init_features[0] |= (1 << KVM_ARM_VCPU_PTRAUTH_ADDRESS | >> 1 << KVM_ARM_VCPU_PTRAUTH_GENERIC); >> } >> + if (cpu->has_el2 && kvm_arm_el2_supported()) { >> + cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_HAS_EL2; >> + } >> >> /* Do KVM_ARM_VCPU_INIT ioctl */ >> ret = kvm_arm_vcpu_init(cpu); >> -- > How does this interact with creating an aarch32 VM with > "-cpu host,aarch64=off" ? Looking at the kernel, it will > fail vcpu_init if you ask for a vcpu with both EL1_32BIT > and HAS_EL2. I guess since the virt board will only request > HAS_EL2 if you say virtualization=on this is fine. Do we > give a sensible error message if the user tries > -accel kvm -M virt,virtualization=on -cpu host,aarch64=off ? Not yet. I will add one.
Thanks! Eric > > -- PMM >