Merge tag 'kvm-x86-mmu-6.4' of https://github.com/kvm-x86/linux into HEAD
[platform/kernel/linux-rpi.git] / arch / x86 / include / asm / kvm_host.h
index a0e58ca..ffdb0c3 100644 (file)
@@ -420,6 +420,10 @@ struct kvm_mmu_root_info {
 
 #define KVM_MMU_NUM_PREV_ROOTS 3
 
+#define KVM_MMU_ROOT_CURRENT           BIT(0)
+#define KVM_MMU_ROOT_PREVIOUS(i)       BIT(1+i)
+#define KVM_MMU_ROOTS_ALL              (BIT(1 + KVM_MMU_NUM_PREV_ROOTS) - 1)
+
 #define KVM_HAVE_MMU_RWLOCK
 
 struct kvm_mmu_page;
@@ -439,9 +443,8 @@ struct kvm_mmu {
        gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
                            gpa_t gva_or_gpa, u64 access,
                            struct x86_exception *exception);
-       int (*sync_page)(struct kvm_vcpu *vcpu,
-                        struct kvm_mmu_page *sp);
-       void (*invlpg)(struct kvm_vcpu *vcpu, gva_t gva, hpa_t root_hpa);
+       int (*sync_spte)(struct kvm_vcpu *vcpu,
+                        struct kvm_mmu_page *sp, int i);
        struct kvm_mmu_root_info root;
        union kvm_cpu_role cpu_role;
        union kvm_mmu_page_role root_role;
@@ -479,11 +482,6 @@ struct kvm_mmu {
        u64 pdptrs[4]; /* pae */
 };
 
-struct kvm_tlb_range {
-       u64 start_gfn;
-       u64 pages;
-};
-
 enum pmc_type {
        KVM_PMC_GP = 0,
        KVM_PMC_FIXED,
@@ -1585,9 +1583,9 @@ struct kvm_x86_ops {
 
        void (*flush_tlb_all)(struct kvm_vcpu *vcpu);
        void (*flush_tlb_current)(struct kvm_vcpu *vcpu);
-       int  (*tlb_remote_flush)(struct kvm *kvm);
-       int  (*tlb_remote_flush_with_range)(struct kvm *kvm,
-                       struct kvm_tlb_range *range);
+       int  (*flush_remote_tlbs)(struct kvm *kvm);
+       int  (*flush_remote_tlbs_range)(struct kvm *kvm, gfn_t gfn,
+                                       gfn_t nr_pages);
 
        /*
         * Flush any TLB entries associated with the given GVA.
@@ -1791,8 +1789,8 @@ void kvm_arch_free_vm(struct kvm *kvm);
 #define __KVM_HAVE_ARCH_FLUSH_REMOTE_TLB
 static inline int kvm_arch_flush_remote_tlb(struct kvm *kvm)
 {
-       if (kvm_x86_ops.tlb_remote_flush &&
-           !static_call(kvm_x86_tlb_remote_flush)(kvm))
+       if (kvm_x86_ops.flush_remote_tlbs &&
+           !static_call(kvm_x86_flush_remote_tlbs)(kvm))
                return 0;
        else
                return -ENOTSUPP;
@@ -1997,10 +1995,6 @@ static inline int __kvm_irq_line_state(unsigned long *irq_state,
        return !!(*irq_state);
 }
 
-#define KVM_MMU_ROOT_CURRENT           BIT(0)
-#define KVM_MMU_ROOT_PREVIOUS(i)       BIT(1+i)
-#define KVM_MMU_ROOTS_ALL              (~0UL)
-
 int kvm_pic_set_irq(struct kvm_pic *pic, int irq, int irq_source_id, int level);
 void kvm_pic_clear_all(struct kvm_pic *pic, int irq_source_id);
 
@@ -2044,8 +2038,8 @@ int kvm_emulate_hypercall(struct kvm_vcpu *vcpu);
 int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u64 error_code,
                       void *insn, int insn_len);
 void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva);
-void kvm_mmu_invalidate_gva(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
-                           gva_t gva, hpa_t root_hpa);
+void kvm_mmu_invalidate_addr(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
+                            u64 addr, unsigned long roots);
 void kvm_mmu_invpcid_gva(struct kvm_vcpu *vcpu, gva_t gva, unsigned long pcid);
 void kvm_mmu_new_pgd(struct kvm_vcpu *vcpu, gpa_t new_pgd);