kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH 00/13] KVM: x86: Remove emulation_result enums
@ 2019-08-23  1:06 Sean Christopherson
  2019-08-23  1:06 ` [RESEND PATCH 01/13] KVM: x86: Relocate MMIO exit stats counting Sean Christopherson
                   ` (12 more replies)
  0 siblings, 13 replies; 33+ messages in thread
From: Sean Christopherson @ 2019-08-23  1:06 UTC (permalink / raw)
  To: Paolo Bonzini, Radim Krčmář
  Cc: Sean Christopherson, Vitaly Kuznetsov, Wanpeng Li, Jim Mattson,
	Joerg Roedel, kvm, linux-kernel

Rework the emulator and its users to handle failure scenarios entirely
within the emulator.

{x86,kvm}_emulate_instruction() currently return a tri-state value to
indicate success/continue, userspace exit needed, and failure.  The
intent of returning EMULATE_FAIL is to let the caller handle failure in
a manner that is appropriate for the current context.  In practice,
the emulator has ended up with a mixture of failure handling, i.e.
whether or not the emulator takes action on failure is dependent on the
specific flavor of emulation.

The mixed handling has proven to be rather fragile, e.g. many flows
incorrectly assume their specific flavor of emulation cannot fail or
that the emulator sets state to report the failure back to userspace.

Move everything inside the emulator, piece by piece, so that the
emulation routines can return '0' for exit to userspace and '1' for
resume the guest, just like every other VM-Exit handler.

Paolo/Radim/Vitaly, apologies for the resend, forgot to cc kvm, lkml
and reviewers.

Sean Christopherson (13):
  KVM: x86: Relocate MMIO exit stats counting
  KVM: x86: Clean up handle_emulation_failure()
  KVM: x86: Refactor kvm_vcpu_do_singlestep() to remove out param
  KVM: x86: Drop EMULTYPE_NO_UD_ON_FAIL as a standalone type
  KVM: x86: Don't attempt VMWare emulation on #GP with non-zero error
    code
  KVM: x86: Move #GP injection for VMware into x86_emulate_instruction()
  KVM: x86: Add explicit flag for forced emulation on #UD
  KVM: x86: Move #UD injection for failed emulation into emulation code
  KVM: x86: Exit to userspace on emulation skip failure
  KVM: x86: Handle emulation failure directly in kvm_task_switch()
  KVM: x86: Move triple fault request into RM int injection
  KVM: VMX: Remove EMULATE_FAIL handling in handle_invalid_guest_state()
  KVM: x86: Remove emulation_result enums, EMULATE_{DONE,FAIL,USER_EXIT}

 arch/x86/include/asm/kvm_host.h |  10 +--
 arch/x86/kvm/mmu.c              |  16 +---
 arch/x86/kvm/svm.c              |  41 ++++-------
 arch/x86/kvm/vmx/vmx.c          |  92 +++++++++--------------
 arch/x86/kvm/x86.c              | 127 +++++++++++++++++---------------
 arch/x86/kvm/x86.h              |   2 +-
 6 files changed, 121 insertions(+), 167 deletions(-)

-- 
2.22.0


^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2019-08-27 20:22 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-23  1:06 [RESEND PATCH 00/13] KVM: x86: Remove emulation_result enums Sean Christopherson
2019-08-23  1:06 ` [RESEND PATCH 01/13] KVM: x86: Relocate MMIO exit stats counting Sean Christopherson
2019-08-23  9:15   ` Vitaly Kuznetsov
2019-08-23 14:37     ` Sean Christopherson
2019-08-23  1:06 ` [RESEND PATCH 02/13] KVM: x86: Clean up handle_emulation_failure() Sean Christopherson
2019-08-23  9:23   ` Vitaly Kuznetsov
2019-08-23 12:58     ` Liran Alon
2019-08-23  1:06 ` [RESEND PATCH 03/13] KVM: x86: Refactor kvm_vcpu_do_singlestep() to remove out param Sean Christopherson
2019-08-23  9:32   ` Vitaly Kuznetsov
2019-08-23 13:05   ` Liran Alon
2019-08-23  1:07 ` [RESEND PATCH 04/13] KVM: x86: Drop EMULTYPE_NO_UD_ON_FAIL as a standalone type Sean Christopherson
2019-08-23  9:34   ` Vitaly Kuznetsov
2019-08-23 13:21   ` Liran Alon
2019-08-23 13:32     ` Liran Alon
2019-08-23 21:55       ` Sean Christopherson
2019-08-23  1:07 ` [RESEND PATCH 05/13] KVM: x86: Don't attempt VMWare emulation on #GP with non-zero error code Sean Christopherson
2019-08-23 11:51   ` Vitaly Kuznetsov
2019-08-23 13:23   ` Liran Alon
2019-08-23  1:07 ` [RESEND PATCH 06/13] KVM: x86: Move #GP injection for VMware into x86_emulate_instruction() Sean Christopherson
2019-08-23 12:27   ` Vitaly Kuznetsov
2019-08-23 13:30   ` Liran Alon
2019-08-23  1:07 ` [RESEND PATCH 07/13] KVM: x86: Add explicit flag for forced emulation on #UD Sean Christopherson
2019-08-23 13:47   ` Liran Alon
2019-08-23 14:44     ` Sean Christopherson
2019-08-23 15:31       ` Liran Alon
2019-08-23  1:07 ` [RESEND PATCH 08/13] KVM: x86: Move #UD injection for failed emulation into emulation code Sean Christopherson
2019-08-23 13:48   ` Liran Alon
2019-08-27 20:22     ` Sean Christopherson
2019-08-23  1:07 ` [RESEND PATCH 09/13] KVM: x86: Exit to userspace on emulation skip failure Sean Christopherson
2019-08-23  1:07 ` [RESEND PATCH 10/13] KVM: x86: Handle emulation failure directly in kvm_task_switch() Sean Christopherson
2019-08-23  1:07 ` [RESEND PATCH 11/13] KVM: x86: Move triple fault request into RM int injection Sean Christopherson
2019-08-23  1:07 ` [RESEND PATCH 12/13] KVM: VMX: Remove EMULATE_FAIL handling in handle_invalid_guest_state() Sean Christopherson
2019-08-23  1:07 ` [RESEND PATCH 13/13] KVM: x86: Remove emulation_result enums, EMULATE_{DONE,FAIL,USER_EXIT} Sean Christopherson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).