mbox series

[v4,0/6] KVM: x86: Prep KVM hypercall handling for TDX

Message ID 20241128004344.4072099-1-seanjc@google.com (mailing list archive)
Headers show
Series KVM: x86: Prep KVM hypercall handling for TDX | expand

Message

Sean Christopherson Nov. 28, 2024, 12:43 a.m. UTC
Effectively v4 of Binbin's series to handle hypercall exits to userspace in
a generic manner, so that TDX

Binbin and Kai, this is fairly different that what we last discussed.  While
sorting through Binbin's latest patch, I stumbled on what I think/hope is an
approach that will make life easier for TDX.  Rather than have common code
set the return value, _and_ have TDX implement a callback to do the same for
user return MSRs, just use the callback for all paths.

As for abusing vcpu->run->hypercall.ret... It's obviously a bit gross, but
I think it's a lesser evil than having multiple a one-line wrappers just to
trampoline in the return code.

v4:
 - Fix an SEV-* bug where KVM trips the WARN in is_64_bit_mode().
 - Add a pile of reworks to (hopefully) avoid as much duplicate code when
   TDX comes along.

v3: https://lore.kernel.org/all/20240826022255.361406-1-binbin.wu@linux.intel.com

Binbin Wu (1):
  KVM: x86: Add a helper to check for user interception of KVM
    hypercalls

Sean Christopherson (5):
  KVM: x86: Play nice with protected guests in complete_hypercall_exit()
  KVM: x86: Move "emulate hypercall" function declarations to x86.h
  KVM: x86: Bump hypercall stat prior to fully completing hypercall
  KVM: x86: Always complete hypercall via function callback
  KVM: x86: Refactor __kvm_emulate_hypercall() into a macro

 arch/x86/include/asm/kvm_host.h |  6 ----
 arch/x86/kvm/svm/sev.c          |  4 +--
 arch/x86/kvm/x86.c              | 50 +++++++++++----------------------
 arch/x86/kvm/x86.h              | 28 ++++++++++++++++++
 4 files changed, 47 insertions(+), 41 deletions(-)


base-commit: 4d911c7abee56771b0219a9fbf0120d06bdc9c14

Comments

Huang, Kai Nov. 28, 2024, 1:06 a.m. UTC | #1
On Wed, 2024-11-27 at 16:43 -0800, Sean Christopherson wrote:
> Effectively v4 of Binbin's series to handle hypercall exits to userspace in
> a generic manner, so that TDX
> 
> Binbin and Kai, this is fairly different that what we last discussed.  While
> sorting through Binbin's latest patch, I stumbled on what I think/hope is an
> approach that will make life easier for TDX.  Rather than have common code
> set the return value, _and_ have TDX implement a callback to do the same for
> user return MSRs, just use the callback for all paths.
> 
> As for abusing vcpu->run->hypercall.ret... It's obviously a bit gross, but
> I think it's a lesser evil than having multiple a one-line wrappers just to
> trampoline in the return code.

Doesn't seem to be "gross" to me, and AFAICT now for TDX we just need to play
with __kvm_emulate_hypercall() with a TDX-specific completion callback.

Which is nice.  Thanks!

For this series:

Reviewed-by: Kai Huang <kai.huang@intel.com>