Hyper-V provides a para-virtualization hypercall
HvFlushGuestPhysicalAddressSpace
to flush nested VM address space mapping in l1 hypervisor and it's to reduce
overhead
of flushing ept tlb among vcpus. The tradition way is to send IPIs to all
affected
vcpus and executes INVEPT on each vcpus. It will trigger several vmexits for
IPI and
INVEPT emulation. The pv hypercall can help to flush specified ept table on all
vcpus
via one single hypercall.
Change since v1:
- Fix compilation error for non-x86 platform.
- Use ept_pointers_match to check condition of identical ept
table pointer and get ept pointer from struct vcpu_vmx->ept_pointer.
- Add hyperv_nested_flush_guest_mapping ftrace support
Lan Tianyu (5):
X86/Hyper-V: Add flush HvFlushGuestPhysicalAddressSpace hypercall
support
KVM: Add tlb remote flush callback in kvm_x86_ops.
KVM/VMX: Add identical ept table pointer check
KVM/x86: Add tlb_remote_flush callback support for vmx
X86/Hyper-V: Add hyperv_nested_flush_guest_mapping ftrace support
arch/x86/hyperv/Makefile | 2 +-
arch/x86/hyperv/nested.c | 67 +++++++++++++++++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 8 +++++
arch/x86/include/asm/kvm_host.h | 11 ++++++
arch/x86/include/asm/mshyperv.h | 2 ++
arch/x86/include/asm/trace/hyperv.h | 14 ++++++++
arch/x86/kvm/vmx.c | 59 ++++++++++++++++++++++++++++++++
include/linux/kvm_host.h | 7 ++++
virt/kvm/kvm_main.c | 11 +++++-
9 files changed, 179 insertions(+), 2 deletions(-)
create mode 100644 arch/x86/hyperv/nested.c
--
2.14.3
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel