Introduce kvm_arm_cpu_feature_supported to check whether KVM supports to set CPU features in ARM.
Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com> Signed-off-by: Peng Liang <liangpen...@huawei.com> --- target/arm/kvm_arm.h | 7 +++++++ target/arm/kvm64.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index bc178eeb84c0..33b3f107b47d 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -290,6 +290,13 @@ bool kvm_arm_pmu_supported(void); */ bool kvm_arm_sve_supported(void); +/** + * kvm_arm_cpu_feature_supported: + * + * Returns true if KVM can set CPU features and false otherwise. + */ +bool kvm_arm_cpu_feature_supported(void); + /** * kvm_arm_get_max_vm_ipa_size: * @ms: Machine state handle diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c index 542ade8fac9d..d0a8a7e8194a 100644 --- a/target/arm/kvm64.c +++ b/target/arm/kvm64.c @@ -663,6 +663,20 @@ bool kvm_arm_sve_supported(void) return kvm_check_extension(kvm_state, KVM_CAP_ARM_SVE); } +bool kvm_arm_cpu_feature_supported(void) +{ + static bool cpu_feature_initialized; + static bool cpu_feature_supported; + + if (!cpu_feature_initialized) { + cpu_feature_supported = kvm_check_extension(kvm_state, + KVM_CAP_ARM_CPU_FEATURE); + cpu_feature_initialized = true; + } + + return cpu_feature_supported; +} + QEMU_BUILD_BUG_ON(KVM_ARM64_SVE_VQ_MIN != 1); void kvm_arm_sve_get_vls(CPUState *cs, unsigned long *map) -- 2.26.2