mbox series

[0/9] x86/virt: KVM: x86: Exception handling fixes/cleanups

Message ID 20201231002702.2223707-1-seanjc@google.com (mailing list archive)
Headers show
Series x86/virt: KVM: x86: Exception handling fixes/cleanups | expand

Message

Sean Christopherson Dec. 31, 2020, 12:26 a.m. UTC
This series is a conglomeration of three previous series/patches and a bit
of new code.  None of the previous series are directly related, but they
are all needed to achieve the overarching goal of nuking
__kvm_handle_fault_on_reboot(), which is a rather ugly inline asm macro
that has the unfortunate side effect of inserting in-line JMP+CALL
sequences.

Patches 1-3 are resurrected from a series by David Reed[1] to fix VMXOFF
bugs in the reboot flows.

Patch 4 is a patch from Uros Bizjak to get rid of custom inline asm in
nested VMX.  This already received Paolo's "Queued, thanks." blessing,
but has not been pushed to kvm.git.  It's included here as there is an
indirect dependency in patch 8.

Patches 5-6 are minor tweaks to KVM's VMX{ON/OFF} paths to use the
kernel's now-fault-tolerant VMXOFF instead of KVM's custom asm.

Patch 7 replaces SVM's __ex()/__kvm_handle_fault_on_reboot() with more
tailored asm goto macros, similar to the existing VMX asm_vmx*() macros.
This is largely an excuse to get rid of __kvm_handle_fault_on_reboot();
the actual benefits of removing JMP+CALL are likely negligible as SVM only
has a few uses of the macro (versus VMX's bajillion VMREADs/VMWRITEs).

Patch 8 removes __ex()/__kvm_handle_fault_on_reboot().

Patch 9 is a very trimmed down version of a different patch from Uros[3],
which cleaned up the __ex()/__kvm_handle_fault_on_reboot() code, as
opposed to zapping them entirely.

[1] https://lkml.kernel.org/r/20200704203809.76391-1-dpreed@deepplum.com
[2] https://lkml.kernel.org/r/20201029134145.107560-1-ubizjak@gmail.com
[3] https://lkml.kernel.org/r/20201221194800.46962-1-ubizjak@gmail.com

David P. Reed (1):
  x86/virt: Mark flags and memory as clobbered by VMXOFF

Sean Christopherson (6):
  x86/virt: Eat faults on VMXOFF in reboot flows
  x86/reboot: Force all cpus to exit VMX root if VMX is supported
  KVM: VMX: Move Intel PT shenanigans out of VMXON/VMXOFF flows
  KVM: VMX: Use the kernel's version of VMXOFF
  KVM: SVM: Use asm goto to handle unexpected #UD on SVM instructions
  KVM: x86: Kill off __ex() and __kvm_handle_fault_on_reboot()

Uros Bizjak (2):
  KVM/nVMX: Use __vmx_vcpu_run in nested_vmx_check_vmentry_hw
  KVM: x86: Move declaration of kvm_spurious_fault() to x86.h

 arch/x86/include/asm/kvm_host.h | 25 --------------
 arch/x86/include/asm/virtext.h  | 25 ++++++++++----
 arch/x86/kernel/reboot.c        | 30 ++++++-----------
 arch/x86/kvm/svm/sev.c          |  5 ++-
 arch/x86/kvm/svm/svm.c          | 18 +---------
 arch/x86/kvm/svm/svm_ops.h      | 59 +++++++++++++++++++++++++++++++++
 arch/x86/kvm/vmx/nested.c       | 32 ++----------------
 arch/x86/kvm/vmx/vmenter.S      |  2 +-
 arch/x86/kvm/vmx/vmx.c          | 28 ++++++----------
 arch/x86/kvm/vmx/vmx.h          |  1 +
 arch/x86/kvm/vmx/vmx_ops.h      |  4 +--
 arch/x86/kvm/x86.c              |  9 ++++-
 arch/x86/kvm/x86.h              |  2 ++
 13 files changed, 117 insertions(+), 123 deletions(-)
 create mode 100644 arch/x86/kvm/svm/svm_ops.h

Comments

Paolo Bonzini Jan. 27, 2021, 5:26 p.m. UTC | #1
On 31/12/20 01:26, Sean Christopherson wrote:
> This series is a conglomeration of three previous series/patches and a bit
> of new code.  None of the previous series are directly related, but they
> are all needed to achieve the overarching goal of nuking
> __kvm_handle_fault_on_reboot(), which is a rather ugly inline asm macro
> that has the unfortunate side effect of inserting in-line JMP+CALL
> sequences.
> 
> Patches 1-3 are resurrected from a series by David Reed[1] to fix VMXOFF
> bugs in the reboot flows.
> 
> Patch 4 is a patch from Uros Bizjak to get rid of custom inline asm in
> nested VMX.  This already received Paolo's "Queued, thanks." blessing,
> but has not been pushed to kvm.git.  It's included here as there is an
> indirect dependency in patch 8.
> 
> Patches 5-6 are minor tweaks to KVM's VMX{ON/OFF} paths to use the
> kernel's now-fault-tolerant VMXOFF instead of KVM's custom asm.
> 
> Patch 7 replaces SVM's __ex()/__kvm_handle_fault_on_reboot() with more
> tailored asm goto macros, similar to the existing VMX asm_vmx*() macros.
> This is largely an excuse to get rid of __kvm_handle_fault_on_reboot();
> the actual benefits of removing JMP+CALL are likely negligible as SVM only
> has a few uses of the macro (versus VMX's bajillion VMREADs/VMWRITEs).
> 
> Patch 8 removes __ex()/__kvm_handle_fault_on_reboot().
> 
> Patch 9 is a very trimmed down version of a different patch from Uros[3],
> which cleaned up the __ex()/__kvm_handle_fault_on_reboot() code, as
> opposed to zapping them entirely.
> 
> [1] https://lkml.kernel.org/r/20200704203809.76391-1-dpreed@deepplum.com
> [2] https://lkml.kernel.org/r/20201029134145.107560-1-ubizjak@gmail.com
> [3] https://lkml.kernel.org/r/20201221194800.46962-1-ubizjak@gmail.com
> 
> David P. Reed (1):
>    x86/virt: Mark flags and memory as clobbered by VMXOFF
> 
> Sean Christopherson (6):
>    x86/virt: Eat faults on VMXOFF in reboot flows
>    x86/reboot: Force all cpus to exit VMX root if VMX is supported
>    KVM: VMX: Move Intel PT shenanigans out of VMXON/VMXOFF flows
>    KVM: VMX: Use the kernel's version of VMXOFF
>    KVM: SVM: Use asm goto to handle unexpected #UD on SVM instructions
>    KVM: x86: Kill off __ex() and __kvm_handle_fault_on_reboot()
> 
> Uros Bizjak (2):
>    KVM/nVMX: Use __vmx_vcpu_run in nested_vmx_check_vmentry_hw
>    KVM: x86: Move declaration of kvm_spurious_fault() to x86.h
> 
>   arch/x86/include/asm/kvm_host.h | 25 --------------
>   arch/x86/include/asm/virtext.h  | 25 ++++++++++----
>   arch/x86/kernel/reboot.c        | 30 ++++++-----------
>   arch/x86/kvm/svm/sev.c          |  5 ++-
>   arch/x86/kvm/svm/svm.c          | 18 +---------
>   arch/x86/kvm/svm/svm_ops.h      | 59 +++++++++++++++++++++++++++++++++
>   arch/x86/kvm/vmx/nested.c       | 32 ++----------------
>   arch/x86/kvm/vmx/vmenter.S      |  2 +-
>   arch/x86/kvm/vmx/vmx.c          | 28 ++++++----------
>   arch/x86/kvm/vmx/vmx.h          |  1 +
>   arch/x86/kvm/vmx/vmx_ops.h      |  4 +--
>   arch/x86/kvm/x86.c              |  9 ++++-
>   arch/x86/kvm/x86.h              |  2 ++
>   13 files changed, 117 insertions(+), 123 deletions(-)
>   create mode 100644 arch/x86/kvm/svm/svm_ops.h
> 

Queued, thanks.

Paolo