aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r--arch/x86/kvm/mmu.c7
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
3436static bool can_do_async_pf(struct kvm_vcpu *vcpu) 3436bool 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);