Skip to content

nVMX: Nested VMX, v11

Nadav Har'El kvm 1 version Applied

Status from this message: Applied, thanks.

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest31 patches 5 repliesApplied

Patches in v1 Applied

#Subject and filesSizeRepliesApplied
1/31nVMX: Keep list of loaded VMCSs, instead of vcpus.arch/x86/kvm/vmx.c+86 -640 replies
2/31nVMX: Add "nested" module option to kvm_intelarch/x86/kvm/vmx.c+25 -00 replies
3/31nVMX: Implement VMXON and VMXOFFarch/x86/kvm/vmx.c+108 -20 replies
4/31nVMX: Allow setting the VMXE bit in CR4arch/x86/include/asm/kvm_host.h arch/x86/kvm/svm.c arch/x86/kvm/vmx.c +1 more+22 -70 replies
5/31nVMX: Introduce vmcs12: a VMCS structure for L1arch/x86/kvm/vmx.c+75 -00 replies
6/31nVMX: Implement reading and writing of VMX MSRsarch/x86/include/asm/msr-index.h arch/x86/kvm/vmx.c+231 -00 replies
7/31nVMX: Decoding memory operands of VMX instructionsarch/x86/kvm/vmx.c arch/x86/kvm/x86.c arch/x86/kvm/x86.h+59 -10 replies
8/31nVMX: Introduce vmcs02: VMCS used to run L2arch/x86/kvm/vmx.c+100 -00 replies
9/31nVMX: Add VMCS fields to the vmcs12arch/x86/kvm/vmx.c+281 -00 replies
10/31nVMX: Success/failure of VMX instructions.arch/x86/include/asm/vmx.h arch/x86/kvm/vmx.c+69 -00 replies
11/31nVMX: Implement VMCLEARarch/x86/kvm/vmx.c arch/x86/kvm/x86.c+65 -10 replies
12/31nVMX: Implement VMPTRLDarch/x86/kvm/vmx.c+61 -10 replies
13/31nVMX: Implement VMPTRSTarch/x86/kvm/vmx.c arch/x86/kvm/x86.c arch/x86/kvm/x86.h+33 -20 replies
14/31nVMX: Implement VMREAD and VMWRITEarch/x86/kvm/vmx.c+191 -20 replies
15/31nVMX: Move host-state field setup to a functionarch/x86/kvm/vmx.c+42 -320 replies
16/31nVMX: Move control field setup to functionsarch/x86/kvm/vmx.c+47 -330 replies
17/31nVMX: Prepare vmcs02 from vmcs01 and vmcs12arch/x86/kvm/vmx.c+279 -00 replies
18/31nVMX: Implement VMLAUNCH and VMRESUMEarch/x86/kvm/vmx.c+63 -20 replies
19/31nVMX: No need for handle_vmx_insn function any morearch/x86/kvm/vmx.c+0 -60 replies
20/31nVMX: Exiting from L2 to L1arch/x86/include/asm/vmx.h arch/x86/kvm/vmx.c+266 -00 replies
21/31nVMX: vmcs12 checks on nested entryarch/x86/include/asm/vmx.h arch/x86/kvm/vmx.c+109 -00 replies
22/31nVMX: Deciding if L0 or L1 should handle an L2 exitarch/x86/kvm/vmx.c+252 -10 replies
23/31nVMX: Correct handling of interrupt injectionarch/x86/kvm/vmx.c+36 -00 replies
24/31nVMX: Correct handling of exception injectionarch/x86/kvm/vmx.c+26 -00 replies
25/31nVMX: Correct handling of idt vectoring infoarch/x86/kvm/vmx.c+30 -00 replies
26/31nVMX: Handling of CR0 and CR4 modifying instructionsarch/x86/kvm/vmx.c+55 -30 replies
27/31nVMX: Further fixes for lazy FPU loadingarch/x86/kvm/vmx.c+30 -10 replies
28/31nVMX: Additional TSC-offset handlingarch/x86/kvm/vmx.c+12 -00 replies
29/31nVMX: Add VMX to list of supported cpuid featuresarch/x86/kvm/vmx.c+2 -00 replies
30/31nVMX: Miscellenous small correctionsarch/x86/kvm/vmx.c+1 -10 replies
31/31nVMX: DocumentationDocumentation/kvm/nested-vmx.txt+251 -03 replies

Reviews trailers per patch

None of the 31 patches has a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchKevin Tian
SeriesA-b
1/31
2/31
3/31
4/31
5/31
6/31
7/31
8/31
9/31
10/31
11/31
12/31
13/31
14/31
15/31
16/31
17/31
18/31
19/31
20/31
21/31
22/31
23/31
24/31
25/31
26/31
27/31
28/31
29/31
30/31
31/31

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 0/31] nVMX: Nested VMX, v11

Hi,

This is the eleventh iteration of the nested VMX patch set, and hopefully the last in this format.

Improvements in this version over the previous one include:

* Overhauled vmcs, cpu, and launched handling (new loaded_vmcs structure and per-cpu linked-list replacing old vcpu linked-list).

* Added missing checks that VMPTRLD was done, in emulating VMLAUNCH and some other VMX instructions.

* prepare_vmcs02 is now void, and cannot fail. Correctly handle the case of apic-access page with an invalid GPA.

* A bunch of corrections to errors and omissions discovered by Kevin Tian.

* Miscellenous function name changes, and other cosmetic improvements.

This new set of patches applies to the current KVM trunk (I checked with 5b186b275c0288c8576d26baebe9019875d68a2b).

Avi, please apply.

Nadav.

About nested VMX:
-----------------

The following 31 patches implement nested VMX support. This feature enables a guest to use the VMX APIs in order to run its own nested guests. In other words, it allows running hypervisors (that use VMX) under KVM. Multiple guest hypervisors can be run concurrently, and each of those can in turn host multiple guests.

The theory behind this work, our implementation, and its performance characteristics were presented in OSDI 2010 (the USENIX Symposium on Operating Systems Design and Implementation). Our paper was titled "The Turtles Project: Design and Implementation of Nested Virtualization", and was awarded "Jay Lepreau Best Paper". The paper is available online, at:

http://www.usenix.org/events/osdi10/tech/full_papers/Ben-Yehuda.pdf

This patch set does not include all the features described in the paper. In particular, this patch set is missing nested EPT (L1 can't use EPT and must use shadow page tables). It is also missing some features required to run VMWare hypervisors as a guest. These missing features will be sent as follow-on patchs.

Running nested VMX:
------------------

The nested VMX feature is currently disabled by default. It must be explicitly enabled with the "nested=1" option to the kvm-intel module.

No modifications are required to user space (qemu). However, qemu's default emulated CPU type (qemu64) does not list the "VMX" CPU feature, so it must be explicitly enabled, by giving qemu one of the following options:

-cpu host (emulated CPU has all features of the real CPU)

-cpu qemu64,+vmx (add just the vmx feature to a named CPU type)

This version was only tested with KVM (64-bit) as a guest hypervisor, and Linux as a nested guest.

Patch statistics:
-----------------

 Documentation/kvm/nested-vmx.txt |  251 ++
 arch/x86/include/asm/kvm_host.h  |    2 
 arch/x86/include/asm/msr-index.h |   12 
 arch/x86/include/asm/vmx.h       |   43 
 arch/x86/kvm/svm.c               |    6 
 arch/x86/kvm/vmx.c               | 2733 +++++++++++++++++++++++++++--
 arch/x86/kvm/x86.c               |   11 
 arch/x86/kvm/x86.h               |    8 
 8 files changed, 2907 insertions(+), 159 deletions(-)

--
Nadav Har'El
IBM Haifa Research Lab