[PATCH v2 0/4] Add support for XMM fast hypercalls

Siddharth Chandrasekaran
2021-04-12T17:02:51Z

Hyper-V supports the use of XMM registers to perform fast hypercalls.
This allows guests to take advantage of the improved performance of the
fast hypercall interface even though a hypercall may require more than
(the current maximum of) two general purpose registers.

The XMM fast hypercall interface uses an additional six XMM registers
(XMM0 to XMM5) to allow the caller to pass an input parameter block of
up to 112 bytes. Hyper-V can also return data back to the guest in the
remaining XMM registers that are not used by the current hypercall.

Although the Hyper-v TLFS mentions that a guest cannot use this feature
unless the hypervisor advertises support for it, some hypercalls which
we plan on upstreaming in future uses them anyway. This patchset adds
necessary infrastructure for handling input/output via XMM registers and
patches kvm_hv_flush_tlb() to use xmm input arguments.

~ Sid.

v2:
- Add hc.fast to is_xmm_fast_hypercall() check
- Split CPUID feature bits for input and output

Siddharth Chandrasekaran (4):
KVM: x86: Move FPU register accessors into fpu.h
KVM: hyper-v: Collect hypercall params into struct
KVM: x86: kvm_hv_flush_tlb use inputs from XMM registers
KVM: hyper-v: Advertise support for fast XMM hypercalls

arch/x86/include/asm/hyperv-tlfs.h | 7 +-
arch/x86/kvm/emulate.c | 138 +++-------------
arch/x86/kvm/fpu.h | 140 +++++++++++++++++
arch/x86/kvm/hyperv.c | 242 +++++++++++++++++++----------
4 files changed, 327 insertions(+), 200 deletions(-)
create mode 100644 arch/x86/kvm/fpu.h

--
2.17.1