]> git.itanic.dy.fi Git - linux-stable/commitdiff
KVM: x86: hyper-v: Introduce kvm_hv_is_tlb_flush_hcall()
authorVitaly Kuznetsov <vkuznets@redhat.com>
Tue, 1 Nov 2022 14:54:00 +0000 (15:54 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 18 Nov 2022 17:59:14 +0000 (12:59 -0500)
The newly introduced helper checks whether vCPU is performing a
Hyper-V TLB flush hypercall. This is required to filter out L2 TLB
flush hypercalls for processing.

Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20221101145426.251680-23-vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/hyperv.h

index 8942e8c6c912edf60c36b4cf5c723f659a13a35e..5f9c76b45f4688a743f72eb950b47c2207d5c120 100644 (file)
@@ -177,6 +177,23 @@ static inline void kvm_hv_vcpu_purge_flush_tlb(struct kvm_vcpu *vcpu)
        kfifo_reset_out(&tlb_flush_fifo->entries);
 }
 
+static inline bool kvm_hv_is_tlb_flush_hcall(struct kvm_vcpu *vcpu)
+{
+       struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu);
+       u16 code;
+
+       if (!hv_vcpu)
+               return false;
+
+       code = is_64_bit_hypercall(vcpu) ? kvm_rcx_read(vcpu) :
+                                          kvm_rax_read(vcpu);
+
+       return (code == HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE ||
+               code == HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST ||
+               code == HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE_EX ||
+               code == HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST_EX);
+}
+
 int kvm_hv_vcpu_flush_tlb(struct kvm_vcpu *vcpu);
 
 #endif