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 8eb8a934b531..1049c3c9b877 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -3433,12 +3433,15 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn) | |||
3433 | return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch); | 3433 | return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch); |
3434 | } | 3434 | } |
3435 | 3435 | ||
3436 | static bool can_do_async_pf(struct kvm_vcpu *vcpu) | 3436 | bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu) |
3437 | { | 3437 | { |
3438 | if (unlikely(!lapic_in_kernel(vcpu) || | 3438 | if (unlikely(!lapic_in_kernel(vcpu) || |
3439 | kvm_event_needs_reinjection(vcpu))) | 3439 | kvm_event_needs_reinjection(vcpu))) |
3440 | return false; | 3440 | return false; |
3441 | 3441 | ||
3442 | if (is_guest_mode(vcpu)) | ||
3443 | return false; | ||
3444 | |||
3442 | return kvm_x86_ops->interrupt_allowed(vcpu); | 3445 | return kvm_x86_ops->interrupt_allowed(vcpu); |
3443 | } | 3446 | } |
3444 | 3447 | ||
@@ -3454,7 +3457,7 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn, | |||
3454 | if (!async) | 3457 | if (!async) |
3455 | return false; /* *pfn has correct page already */ | 3458 | return false; /* *pfn has correct page already */ |
3456 | 3459 | ||
3457 | if (!prefault && can_do_async_pf(vcpu)) { | 3460 | if (!prefault && kvm_can_do_async_pf(vcpu)) { |
3458 | trace_kvm_try_async_get_page(gva, gfn); | 3461 | trace_kvm_try_async_get_page(gva, gfn); |
3459 | if (kvm_find_async_pf_gfn(vcpu, gfn)) { | 3462 | if (kvm_find_async_pf_gfn(vcpu, gfn)) { |
3460 | trace_kvm_async_pf_doublefault(gva, gfn); | 3463 | trace_kvm_async_pf_doublefault(gva, gfn); |