1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * KVM L1 hypervisor optimizations on Hyper-V. 4 */ 5 6#ifndef __ARCH_X86_KVM_KVM_ONHYPERV_H__ 7#define __ARCH_X86_KVM_KVM_ONHYPERV_H__ 8 9#if IS_ENABLED(CONFIG_HYPERV) 10int hv_remote_flush_tlb_with_range(struct kvm *kvm, 11 struct kvm_tlb_range *range); 12int hv_remote_flush_tlb(struct kvm *kvm); 13 14static inline void hv_track_root_tdp(struct kvm_vcpu *vcpu, hpa_t root_tdp) 15{ 16 struct kvm_arch *kvm_arch = &vcpu->kvm->arch; 17 18 if (kvm_x86_ops.tlb_remote_flush == hv_remote_flush_tlb) { 19 spin_lock(&kvm_arch->hv_root_tdp_lock); 20 vcpu->arch.hv_root_tdp = root_tdp; 21 if (root_tdp != kvm_arch->hv_root_tdp) 22 kvm_arch->hv_root_tdp = INVALID_PAGE; 23 spin_unlock(&kvm_arch->hv_root_tdp_lock); 24 } 25} 26#else /* !CONFIG_HYPERV */ 27static inline void hv_track_root_tdp(struct kvm_vcpu *vcpu, hpa_t root_tdp) 28{ 29} 30#endif /* !CONFIG_HYPERV */ 31 32#endif 33