KVM: x86: simplify ept_misconfig
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 17 Aug 2017 16:36:56 +0000 (18:36 +0200)
committerRadim Krčmář <rkrcmar@redhat.com>
Fri, 18 Aug 2017 12:37:48 +0000 (14:37 +0200)
Calling handle_mmio_page_fault() has been unnecessary since commit
e9ee956e311d ("KVM: x86: MMU: Move handle_mmio_page_fault() call to
kvm_mmu_page_fault()", 2016-02-22).

handle_mmio_page_fault() can now be made static.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
arch/x86/kvm/mmu.c
arch/x86/kvm/mmu.h
arch/x86/kvm/vmx.c

index e721e10afda109d39bce1d12e877580717c2e3c8..f7598883920a6ebf723cb3eab842d0559b72c869 100644 (file)
@@ -3648,7 +3648,23 @@ exit:
        return reserved;
 }
 
-int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct)
+/*
+ * Return values of handle_mmio_page_fault:
+ * RET_MMIO_PF_EMULATE: it is a real mmio page fault, emulate the instruction
+ *                     directly.
+ * RET_MMIO_PF_INVALID: invalid spte is detected then let the real page
+ *                     fault path update the mmio spte.
+ * RET_MMIO_PF_RETRY: let CPU fault again on the address.
+ * RET_MMIO_PF_BUG: a bug was detected (and a WARN was printed).
+ */
+enum {
+       RET_MMIO_PF_EMULATE = 1,
+       RET_MMIO_PF_INVALID = 2,
+       RET_MMIO_PF_RETRY = 0,
+       RET_MMIO_PF_BUG = -1
+};
+
+static int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct)
 {
        u64 spte;
        bool reserved;
@@ -4837,6 +4853,7 @@ int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t cr2, u64 error_code,
                        return 1;
                if (r < 0)
                        return r;
+               /* Must be RET_MMIO_PF_INVALID.  */
        }
 
        r = vcpu->arch.mmu.page_fault(vcpu, cr2, lower_32_bits(error_code),
index d7d248a000dd6772681f3f5541e344f9677a2d1d..3ed6192d93b14c97166c980f0cc4d39373cc1e5a 100644 (file)
@@ -56,23 +56,6 @@ void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask, u64 mmio_value);
 void
 reset_shadow_zero_bits_mask(struct kvm_vcpu *vcpu, struct kvm_mmu *context);
 
-/*
- * Return values of handle_mmio_page_fault:
- * RET_MMIO_PF_EMULATE: it is a real mmio page fault, emulate the instruction
- *                     directly.
- * RET_MMIO_PF_INVALID: invalid spte is detected then let the real page
- *                     fault path update the mmio spte.
- * RET_MMIO_PF_RETRY: let CPU fault again on the address.
- * RET_MMIO_PF_BUG: a bug was detected (and a WARN was printed).
- */
-enum {
-       RET_MMIO_PF_EMULATE = 1,
-       RET_MMIO_PF_INVALID = 2,
-       RET_MMIO_PF_RETRY = 0,
-       RET_MMIO_PF_BUG = -1
-};
-
-int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct);
 void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu);
 void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly,
                             bool accessed_dirty);
index df8d2f127508dbbe262c65295c6f914d3b5eba01..45fb0ea78ee8658fec1bf0d70f6e4cc6d148fe33 100644 (file)
@@ -6410,17 +6410,10 @@ static int handle_ept_misconfig(struct kvm_vcpu *vcpu)
                return kvm_skip_emulated_instruction(vcpu);
        }
 
-       ret = handle_mmio_page_fault(vcpu, gpa, true);
        vcpu->arch.gpa_available = true;
-       if (likely(ret == RET_MMIO_PF_EMULATE))
-               return x86_emulate_instruction(vcpu, gpa, 0, NULL, 0) ==
-                                             EMULATE_DONE;
-
-       if (unlikely(ret == RET_MMIO_PF_INVALID))
-               return kvm_mmu_page_fault(vcpu, gpa, 0, NULL, 0);
-
-       if (unlikely(ret == RET_MMIO_PF_RETRY))
-               return 1;
+       ret = kvm_mmu_page_fault(vcpu, gpa, PFERR_RSVD_MASK, NULL, 0);
+       if (ret >= 0)
+               return ret;
 
        /* It is the real ept misconfig */
        WARN_ON(1);