KVM: x86: clean up conditions for asynchronous page fault handling
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 5 Jun 2019 14:46:44 +0000 (16:46 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 13 Jun 2019 17:20:54 +0000 (19:20 +0200)
commit1dfdb45ec510ba27e366878f97484e9c9e728902
tree52d3718a177da3df8e317d300af95084888e47d0
parent0d9ce162cf46c99628cc5da9510b959c7976735b
KVM: x86: clean up conditions for asynchronous page fault handling

Even when asynchronous page fault is disabled, KVM does not want to pause
the host if a guest triggers a page fault; instead it will put it into
an artificial HLT state that allows running other host processes while
allowing interrupt delivery into the guest.

However, the way this feature is triggered is a bit confusing.
First, it is not used for page faults while a nested guest is
running: but this is not an issue since the artificial halt
is completely invisible to the guest, either L1 or L2.  Second,
it is used even if kvm_halt_in_guest() returns true; in this case,
the guest probably should not pay the additional latency cost of the
artificial halt, and thus we should handle the page fault in a
completely synchronous way.

By introducing a new function kvm_can_deliver_async_pf, this patch
commonizes the code that chooses whether to deliver an async page fault
(kvm_arch_async_page_not_present) and the code that chooses whether a
page fault should be handled synchronously (kvm_can_do_async_pf).

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu.c
arch/x86/kvm/x86.c