On Fri, Jul 19, 2019 at 08:01:23PM +0200, Paolo Bonzini wrote: > On 19/07/19 19:25, Sean Christopherson wrote: > > An in-flight patch[1] to make __kvm_handle_fault_on_reboot() play nice > > with objtool will add a JMP after most VMX instructions so that the reboot > > macro can use an actual CALL to kvm_spurious_fault() instead of a funky > > PUSH+JMP facsimile. > > > > Rework the low level VMX instruction helpers to handle unexpected faults > > manually instead of relying on the "fault on reboot" macro. By using > > asm-goto, most helpers can branch directly to an in-function call to > > kvm_spurious_fault(), which can then be optimized by compilers to reside > > out-of-line at the end of the function instead of inline as done by > > "fault on reboot". > > > > The net impact relative to the current code base is more or less a nop > > when building with a compiler that supports __GCC_ASM_FLAG_OUTPUTS__. > > A bunch of code that was previously in .fixup gets moved into the slow > > paths of functions, but the fast paths are more basically unchanged. > > > > Without __GCC_ASM_FLAG_OUTPUTS__, manually coding the Jcc is a net > > positive as CC_SET() without compiler support almost always generates a > > SETcc+CMP+Jcc sequence, which is now replaced with a single Jcc. > > > > A small bonus is that the Jcc instrs are hinted to predict that the VMX > > instr will be successful. > > > > [1] https://lkml.kernel.org/r/64a9b64d127e87b6920a97afde8e96ea76f6524e.1563413318.git.jpoimboe@xxxxxxxxxx > > > > Sean Christopherson (4): > > objtool: KVM: x86: Check kvm_rebooting in kvm_spurious_fault() > > KVM: VMX: Optimize VMX instruction error and fault handling > > KVM: VMX: Add error handling to VMREAD helper > > KVM: x86: Drop ____kvm_handle_fault_on_reboot() > > > > arch/x86/include/asm/kvm_host.h | 6 +-- > > arch/x86/kvm/vmx/ops.h | 93 ++++++++++++++++++++------------- > > arch/x86/kvm/vmx/vmx.c | 42 +++++++++++++++ > > arch/x86/kvm/x86.c | 3 +- > > tools/objtool/check.c | 1 - > > 5 files changed, 102 insertions(+), 43 deletions(-) > > > > Sean, would you mind basing these on top of Josh's patches, so that > Peter can add them to his tree? Sean, FYI, my patches are already in tip/master so these can be based on that. I'm guessing the commit IDs are presumably stable, so the commits can be referenced instead of the lkml link. -- Josh