Enlightened VMCS feature is hardware specific, it is only supported on Intel CPUs. Introduce a simple kvm_hv_evmcs_available() helper, it will be used to filter out 'hv_evmcs' when 'hyperv=on' option is added to X86MachineClass.
Signed-off-by: Vitaly Kuznetsov <vkuzn...@redhat.com> --- target/i386/kvm/kvm-stub.c | 5 +++++ target/i386/kvm/kvm.c | 8 ++++++++ target/i386/kvm/kvm_i386.h | 1 + 3 files changed, 14 insertions(+) diff --git a/target/i386/kvm/kvm-stub.c b/target/i386/kvm/kvm-stub.c index 7f175faa3abd..4e486f41a60a 100644 --- a/target/i386/kvm/kvm-stub.c +++ b/target/i386/kvm/kvm-stub.c @@ -44,3 +44,8 @@ void kvm_hyperv_expand_features(X86CPU *cpu, Error **errp) { return; } + +bool kvm_hv_evmcs_available(void) +{ + return false; +} diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 480908b2463a..6c26b2091d4a 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -96,6 +96,7 @@ static bool has_msr_hv_crash; static bool has_msr_hv_reset; static bool has_msr_hv_vpindex; static bool hv_vpindex_settable; +static bool hv_evmcs_available; static bool has_msr_hv_runtime; static bool has_msr_hv_synic; static bool has_msr_hv_stimer; @@ -195,6 +196,11 @@ bool kvm_hv_vpindex_settable(void) return hv_vpindex_settable; } +bool kvm_hv_evmcs_available(void) +{ + return hv_evmcs_available; +} + static int kvm_get_tsc(CPUState *cs) { X86CPU *cpu = X86_CPU(cs); @@ -2235,6 +2241,8 @@ int kvm_arch_init(MachineState *ms, KVMState *s) has_pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2); hv_vpindex_settable = kvm_check_extension(s, KVM_CAP_HYPERV_VP_INDEX); + hv_evmcs_available = + kvm_check_extension(s, KVM_CAP_HYPERV_ENLIGHTENED_VMCS); has_exception_payload = kvm_check_extension(s, KVM_CAP_EXCEPTION_PAYLOAD); if (has_exception_payload) { diff --git a/target/i386/kvm/kvm_i386.h b/target/i386/kvm/kvm_i386.h index f1176491051d..0fa00511be27 100644 --- a/target/i386/kvm/kvm_i386.h +++ b/target/i386/kvm/kvm_i386.h @@ -48,6 +48,7 @@ bool kvm_has_waitpkg(void); bool kvm_hv_vpindex_settable(void); void kvm_hyperv_expand_features(X86CPU *cpu, Error **errp); +bool kvm_hv_evmcs_available(void); uint64_t kvm_swizzle_msi_ext_dest_id(uint64_t address); -- 2.29.2