19e083ec7SVitaly Kuznetsov /* SPDX-License-Identifier: GPL-2.0-only */ 29e083ec7SVitaly Kuznetsov /* 39e083ec7SVitaly Kuznetsov * Common Hyper-V on KVM and KVM on Hyper-V definitions (SVM). 49e083ec7SVitaly Kuznetsov */ 59e083ec7SVitaly Kuznetsov 69e083ec7SVitaly Kuznetsov #ifndef __ARCH_X86_KVM_SVM_HYPERV_H__ 79e083ec7SVitaly Kuznetsov #define __ARCH_X86_KVM_SVM_HYPERV_H__ 89e083ec7SVitaly Kuznetsov 99e083ec7SVitaly Kuznetsov #include <asm/mshyperv.h> 109e083ec7SVitaly Kuznetsov 119e083ec7SVitaly Kuznetsov #include "../hyperv.h" 12e45aa244SVitaly Kuznetsov #include "svm.h" 13e45aa244SVitaly Kuznetsov nested_svm_hv_update_vm_vp_ids(struct kvm_vcpu * vcpu)14e45aa244SVitaly Kuznetsovstatic inline void nested_svm_hv_update_vm_vp_ids(struct kvm_vcpu *vcpu) 15e45aa244SVitaly Kuznetsov { 16e45aa244SVitaly Kuznetsov struct vcpu_svm *svm = to_svm(vcpu); 17e45aa244SVitaly Kuznetsov struct hv_vmcb_enlightenments *hve = &svm->nested.ctl.hv_enlightenments; 18e45aa244SVitaly Kuznetsov struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu); 19e45aa244SVitaly Kuznetsov 20e45aa244SVitaly Kuznetsov if (!hv_vcpu) 21e45aa244SVitaly Kuznetsov return; 22e45aa244SVitaly Kuznetsov 23e45aa244SVitaly Kuznetsov hv_vcpu->nested.pa_page_gpa = hve->partition_assist_page; 24e45aa244SVitaly Kuznetsov hv_vcpu->nested.vm_id = hve->hv_vm_id; 25e45aa244SVitaly Kuznetsov hv_vcpu->nested.vp_id = hve->hv_vp_id; 26e45aa244SVitaly Kuznetsov } 279e083ec7SVitaly Kuznetsov nested_svm_l2_tlb_flush_enabled(struct kvm_vcpu * vcpu)28*3f4a812eSVitaly Kuznetsovstatic inline bool nested_svm_l2_tlb_flush_enabled(struct kvm_vcpu *vcpu) 29*3f4a812eSVitaly Kuznetsov { 30*3f4a812eSVitaly Kuznetsov struct vcpu_svm *svm = to_svm(vcpu); 31*3f4a812eSVitaly Kuznetsov struct hv_vmcb_enlightenments *hve = &svm->nested.ctl.hv_enlightenments; 32*3f4a812eSVitaly Kuznetsov struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu); 33*3f4a812eSVitaly Kuznetsov 34*3f4a812eSVitaly Kuznetsov if (!hv_vcpu) 35*3f4a812eSVitaly Kuznetsov return false; 36*3f4a812eSVitaly Kuznetsov 37*3f4a812eSVitaly Kuznetsov if (!hve->hv_enlightenments_control.nested_flush_hypercall) 38*3f4a812eSVitaly Kuznetsov return false; 39*3f4a812eSVitaly Kuznetsov 40*3f4a812eSVitaly Kuznetsov return hv_vcpu->vp_assist_page.nested_control.features.directhypercall; 41*3f4a812eSVitaly Kuznetsov } 42*3f4a812eSVitaly Kuznetsov 43b0c9c25eSVitaly Kuznetsov void svm_hv_inject_synthetic_vmexit_post_tlb_flush(struct kvm_vcpu *vcpu); 44b0c9c25eSVitaly Kuznetsov 459e083ec7SVitaly Kuznetsov #endif /* __ARCH_X86_KVM_SVM_HYPERV_H__ */ 46