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? Paolo