FILE
svm_onhyperv.h
File preview with syntax highlighting.
linux-6.19.14/arch/x86/kvm/svm/svm_onhyperv.h
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * KVM L1 hypervisor optimizations on Hyper-V for SVM. 4 */ 5 6#ifndef __ARCH_X86_KVM_SVM_ONHYPERV_H__ 7#define __ARCH_X86_KVM_SVM_ONHYPERV_H__ 8 9#include <asm/mshyperv.h> 10 11#if IS_ENABLED(CONFIG_HYPERV) 12 13#include "kvm_onhyperv.h" 14#include "svm/hyperv.h" 15 16__init void svm_hv_hardware_setup(void); 17 18static inline bool svm_hv_is_enlightened_tlb_enabled(struct kvm_vcpu *vcpu) 19{ 20 struct hv_vmcb_enlightenments *hve = &to_svm(vcpu)->vmcb->control.hv_enlightenments; 21 22 return ms_hyperv.nested_features & HV_X64_NESTED_ENLIGHTENED_TLB && 23 !!hve->hv_enlightenments_control.enlightened_npt_tlb; 24} 25 26static inline void svm_hv_init_vmcb(struct vmcb *vmcb) 27{ 28 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; 29 30 BUILD_BUG_ON(sizeof(vmcb->control.hv_enlightenments) != 31 sizeof(vmcb->control.reserved_sw)); 32 33 if (npt_enabled && 34 ms_hyperv.nested_features & HV_X64_NESTED_ENLIGHTENED_TLB) 35 hve->hv_enlightenments_control.enlightened_npt_tlb = 1; 36 37 if (ms_hyperv.nested_features & HV_X64_NESTED_MSR_BITMAP) 38 hve->hv_enlightenments_control.msr_bitmap = 1; 39} 40 41static inline void svm_hv_vmcb_dirty_nested_enlightenments( 42 struct kvm_vcpu *vcpu) 43{ 44 struct vmcb *vmcb = to_svm(vcpu)->vmcb; 45 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; 46 47 if (hve->hv_enlightenments_control.msr_bitmap) 48 vmcb_mark_dirty(vmcb, HV_VMCB_NESTED_ENLIGHTENMENTS); 49} 50 51static inline void svm_hv_update_vp_id(struct vmcb *vmcb, struct kvm_vcpu *vcpu) 52{ 53 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; 54 u32 vp_index = kvm_hv_get_vpindex(vcpu); 55 56 if (hve->hv_vp_id != vp_index) { 57 hve->hv_vp_id = vp_index; 58 vmcb_mark_dirty(vmcb, HV_VMCB_NESTED_ENLIGHTENMENTS); 59 } 60} 61#else 62 63static inline bool svm_hv_is_enlightened_tlb_enabled(struct kvm_vcpu *vcpu) 64{ 65 return false; 66} 67 68static inline void svm_hv_init_vmcb(struct vmcb *vmcb) 69{ 70} 71 72static inline __init void svm_hv_hardware_setup(void) 73{ 74} 75 76static inline void svm_hv_vmcb_dirty_nested_enlightenments( 77 struct kvm_vcpu *vcpu) 78{ 79} 80 81static inline void svm_hv_update_vp_id(struct vmcb *vmcb, 82 struct kvm_vcpu *vcpu) 83{ 84} 85#endif /* CONFIG_HYPERV */ 86 87#endif /* __ARCH_X86_KVM_SVM_ONHYPERV_H__ */
~/
Read-only file preview.