|
@@ -3224,17 +3224,12 @@ static u64 walk_shadow_page_get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr)
|
|
|
return spte;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * If it is a real mmio page fault, return 1 and emulat the instruction
|
|
|
- * directly, return 0 to let CPU fault again on the address, -1 is
|
|
|
- * returned if bug is detected.
|
|
|
- */
|
|
|
int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct)
|
|
|
{
|
|
|
u64 spte;
|
|
|
|
|
|
if (quickly_check_mmio_pf(vcpu, addr, direct))
|
|
|
- return 1;
|
|
|
+ return RET_MMIO_PF_EMULATE;
|
|
|
|
|
|
spte = walk_shadow_page_get_mmio_spte(vcpu, addr);
|
|
|
|
|
@@ -3247,7 +3242,7 @@ int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct)
|
|
|
|
|
|
trace_handle_mmio_page_fault(addr, gfn, access);
|
|
|
vcpu_cache_mmio_info(vcpu, addr, gfn, access);
|
|
|
- return 1;
|
|
|
+ return RET_MMIO_PF_EMULATE;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -3255,13 +3250,13 @@ int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct)
|
|
|
* it's a BUG if the gfn is not a mmio page.
|
|
|
*/
|
|
|
if (direct && !check_direct_spte_mmio_pf(spte))
|
|
|
- return -1;
|
|
|
+ return RET_MMIO_PF_BUG;
|
|
|
|
|
|
/*
|
|
|
* If the page table is zapped by other cpus, let CPU fault again on
|
|
|
* the address.
|
|
|
*/
|
|
|
- return 0;
|
|
|
+ return RET_MMIO_PF_RETRY;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(handle_mmio_page_fault_common);
|
|
|
|
|
@@ -3271,7 +3266,7 @@ static int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr,
|
|
|
int ret;
|
|
|
|
|
|
ret = handle_mmio_page_fault_common(vcpu, addr, direct);
|
|
|
- WARN_ON(ret < 0);
|
|
|
+ WARN_ON(ret == RET_MMIO_PF_BUG);
|
|
|
return ret;
|
|
|
}
|
|
|
|