Message ID | 20200813102657.2588720-7-liangpeng10@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support disable/enable CPU features for AArch64 | expand |
On Thu, 13 Aug 2020 18:26:54 +0800 Peng Liang <liangpeng10@huawei.com> wrote: > Introduce KVM_CAP_ARM_CPU_FEATURE to check whether KVM supports to set > CPU features in ARM. > > Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> > Signed-off-by: Peng Liang <liangpeng10@huawei.com> > --- > linux-headers/linux/kvm.h | 1 + > target/arm/cpu.c | 5 +++++ > target/arm/kvm64.c | 14 ++++++++++++++ > target/arm/kvm_arm.h | 7 +++++++ > 4 files changed, 27 insertions(+) > > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index a28c366737..0b83d2b4bb 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -1031,6 +1031,7 @@ struct kvm_ppc_resize_hpt { > #define KVM_CAP_PPC_SECURE_GUEST 181 > #define KVM_CAP_HALT_POLL 182 > #define KVM_CAP_ASYNC_PF_INT 183 > +#define KVM_CAP_ARM_CPU_FEATURE 187 > > #ifdef KVM_CAP_IRQ_ROUTING Please split out this header update into a separate patch so that it can be replaced by a proper headers update once the kernel code has been included.
On 8/13/2020 7:00 PM, Cornelia Huck wrote: > On Thu, 13 Aug 2020 18:26:54 +0800 > Peng Liang <liangpeng10@huawei.com> wrote: > >> Introduce KVM_CAP_ARM_CPU_FEATURE to check whether KVM supports to set >> CPU features in ARM. >> >> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> >> Signed-off-by: Peng Liang <liangpeng10@huawei.com> >> --- >> linux-headers/linux/kvm.h | 1 + >> target/arm/cpu.c | 5 +++++ >> target/arm/kvm64.c | 14 ++++++++++++++ >> target/arm/kvm_arm.h | 7 +++++++ >> 4 files changed, 27 insertions(+) >> >> diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h >> index a28c366737..0b83d2b4bb 100644 >> --- a/linux-headers/linux/kvm.h >> +++ b/linux-headers/linux/kvm.h >> @@ -1031,6 +1031,7 @@ struct kvm_ppc_resize_hpt { >> #define KVM_CAP_PPC_SECURE_GUEST 181 >> #define KVM_CAP_HALT_POLL 182 >> #define KVM_CAP_ASYNC_PF_INT 183 >> +#define KVM_CAP_ARM_CPU_FEATURE 187 >> >> #ifdef KVM_CAP_IRQ_ROUTING > > Please split out this header update into a separate patch so that it > can be replaced by a proper headers update once the kernel code has been > included. > > . > Sorry, I'll split out it.
diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h index a28c366737..0b83d2b4bb 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -1031,6 +1031,7 @@ struct kvm_ppc_resize_hpt { #define KVM_CAP_PPC_SECURE_GUEST 181 #define KVM_CAP_HALT_POLL 182 #define KVM_CAP_ASYNC_PF_INT 183 +#define KVM_CAP_ARM_CPU_FEATURE 187 #ifdef KVM_CAP_IRQ_ROUTING diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 4e67b8f22c..3fc54cb3a4 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1539,6 +1539,11 @@ static void arm_cpu_set_bit_prop(Object *obj, Visitor *v, const char *name, Error *local_err = NULL; bool value; + if (!kvm_arm_cpu_feature_supported()) { + warn_report("KVM doesn't support to set CPU feature in arm. " + "Setting to `%s` is ignored.", name); + return; + } if (dev->realized) { qdev_prop_set_after_realize(dev, name, errp); return; diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c index be2d0cda0d..e7470477d5 100644 --- a/target/arm/kvm64.c +++ b/target/arm/kvm64.c @@ -664,6 +664,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) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 99035494ae..c2481ce464 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