diff options
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 5d3376f67794..cb8225969255 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -3698,12 +3698,15 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn) | |||
3698 | return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch); | 3698 | return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch); |
3699 | } | 3699 | } |
3700 | 3700 | ||
3701 | static bool can_do_async_pf(struct kvm_vcpu *vcpu) | 3701 | bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu) |
3702 | { | 3702 | { |
3703 | if (unlikely(!lapic_in_kernel(vcpu) || | 3703 | if (unlikely(!lapic_in_kernel(vcpu) || |
3704 | kvm_event_needs_reinjection(vcpu))) | 3704 | kvm_event_needs_reinjection(vcpu))) |
3705 | return false; | 3705 | return false; |
3706 | 3706 | ||
3707 | if (is_guest_mode(vcpu)) | ||
3708 | return false; | ||
3709 | |||
3707 | return kvm_x86_ops->interrupt_allowed(vcpu); | 3710 | return kvm_x86_ops->interrupt_allowed(vcpu); |
3708 | } | 3711 | } |
3709 | 3712 | ||
@@ -3719,7 +3722,7 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn, | |||
3719 | if (!async) | 3722 | if (!async) |
3720 | return false; /* *pfn has correct page already */ | 3723 | return false; /* *pfn has correct page already */ |
3721 | 3724 | ||
3722 | if (!prefault && can_do_async_pf(vcpu)) { | 3725 | if (!prefault && kvm_can_do_async_pf(vcpu)) { |
3723 | trace_kvm_try_async_get_page(gva, gfn); | 3726 | trace_kvm_try_async_get_page(gva, gfn); |
3724 | if (kvm_find_async_pf_gfn(vcpu, gfn)) { | 3727 | if (kvm_find_async_pf_gfn(vcpu, gfn)) { |
3725 | trace_kvm_async_pf_doublefault(gva, gfn); | 3728 | trace_kvm_async_pf_doublefault(gva, gfn); |