summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/mmu.c
diff options
context:
space:
mode:
authorXiao Guangrong2010-12-07 03:35:25 +0100
committerAvi Kivity2011-01-12 10:30:41 +0100
commitfb67e14fc90f18250259faf61a269320ea8e4d8f (patch)
tree4bb294030aa3e43ca5dbf573f39a915452624665 /arch/x86/kvm/mmu.c
parentKVM: MMU: fix accessed bit set on prefault path (diff)
downloadkernel-qcow2-linux-fb67e14fc90f18250259faf61a269320ea8e4d8f.tar.gz
kernel-qcow2-linux-fb67e14fc90f18250259faf61a269320ea8e4d8f.tar.xz
kernel-qcow2-linux-fb67e14fc90f18250259faf61a269320ea8e4d8f.zip
KVM: MMU: retry #PF for softmmu
Retry #PF for softmmu only when the current vcpu has the same cr3 as the time when #PF occurs Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r--arch/x86/kvm/mmu.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index d475b6b87dce..abda57fac659 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2608,9 +2608,11 @@ static int nonpaging_page_fault(struct kvm_vcpu *vcpu, gva_t gva,
static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
{
struct kvm_arch_async_pf arch;
+
arch.token = (vcpu->arch.apf.id++ << 12) | vcpu->vcpu_id;
arch.gfn = gfn;
arch.direct_map = vcpu->arch.mmu.direct_map;
+ arch.cr3 = vcpu->arch.mmu.get_cr3(vcpu);
return kvm_setup_async_pf(vcpu, gva, gfn, &arch);
}