summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/vmx/hyperv.h
diff options
context:
space:
mode:
authorVitaly Kuznetsov <vkuznets@redhat.com>2023-12-05 11:36:27 +0100
committerSean Christopherson <seanjc@google.com>2023-12-07 18:35:03 +0100
commit453e42b0557148cc7092c72eff6677a5436e3c7c (patch)
treeb71ad9e7d1e809b83604b716e3f1163962e75c96 /arch/x86/kvm/vmx/hyperv.h
parentKVM: x86: Make Hyper-V emulation optional (diff)
downloadlinux-453e42b0557148cc7092c72eff6677a5436e3c7c.tar.xz
linux-453e42b0557148cc7092c72eff6677a5436e3c7c.zip
KVM: nVMX: Introduce helpers to check if Hyper-V evmptr12 is valid/set
In order to get rid of raw 'vmx->nested.hv_evmcs_vmptr' accesses when !CONFIG_KVM_HYPERV, introduce a pair of helpers: nested_vmx_is_evmptr12_valid() to check that eVMPTR points to a valid address. nested_vmx_is_evmptr12_valid() to check that eVMPTR either points to a valid address or is in 'pending' port-migration state (meaning it is supposed to be valid but the exact address wasn't acquired from guest's memory yet). No functional change intended. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Tested-by: Jeremi Piotrowski <jpiotrowski@linux.microsoft.com> Link: https://lore.kernel.org/r/20231205103630.1391318-14-vkuznets@redhat.com Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'arch/x86/kvm/vmx/hyperv.h')
-rw-r--r--arch/x86/kvm/vmx/hyperv.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/x86/kvm/vmx/hyperv.h b/arch/x86/kvm/vmx/hyperv.h
index 0e90ef4efe34..71e90a16f183 100644
--- a/arch/x86/kvm/vmx/hyperv.h
+++ b/arch/x86/kvm/vmx/hyperv.h
@@ -22,6 +22,21 @@ static inline bool evmptr_is_valid(u64 evmptr)
return evmptr != EVMPTR_INVALID && evmptr != EVMPTR_MAP_PENDING;
}
+static inline bool nested_vmx_is_evmptr12_valid(struct vcpu_vmx *vmx)
+{
+ return evmptr_is_valid(vmx->nested.hv_evmcs_vmptr);
+}
+
+static inline bool evmptr_is_set(u64 evmptr)
+{
+ return evmptr != EVMPTR_INVALID;
+}
+
+static inline bool nested_vmx_is_evmptr12_set(struct vcpu_vmx *vmx)
+{
+ return evmptr_is_set(vmx->nested.hv_evmcs_vmptr);
+}
+
static inline bool guest_cpuid_has_evmcs(struct kvm_vcpu *vcpu)
{
/*
@@ -45,6 +60,21 @@ static inline bool evmptr_is_valid(u64 evmptr)
{
return false;
}
+
+static inline bool nested_vmx_is_evmptr12_valid(struct vcpu_vmx *vmx)
+{
+ return false;
+}
+
+static inline bool evmptr_is_set(u64 evmptr)
+{
+ return false;
+}
+
+static inline bool nested_vmx_is_evmptr12_set(struct vcpu_vmx *vmx)
+{
+ return false;
+}
#endif
#endif /* __KVM_X86_VMX_HYPERV_H */