Hi Nadav, > Hi, > > This is the eighth iteration of the nested VMX patch set. This iteration > solves a number of bugs and issues that bothered the reviewers. Some more > issues raised in the previous review remain open, but don't worry - I *am* > working to resolve all of them. > > The biggest improvement in this version is that SMP finally works: You can > now run nested VMX on an SMP host - The "nosmp" kernel option is no longer > required. You can also have SMP L1s and L2s, although in this version, SMP > L2 support is still somewhat buggy and should be made more stable in the > next version. The "vpid=0" option that used to be required is also no longer > required. > > Other improvements include: > > Â* #GP on writing read-only VMX MSRs, don't save/restore them, and don't >  print annoying and incorrect messages on startup. > Â* Cleanup free_l1_state() and renamed it free_nested(). > Â* Removed guest expoitable printk()s. > Â* Finally got rid of the l1_state structure and all its redundant fields. > Â* Moved cpu and launched fields out of the (guest memory) vmcs12, and moved >  to a new structure (in host memory) saved_vmcs. Avi, you asked if and why >  these two fields are really needed - and they are needed, and I explained >  why in a comment. > Â* Moved kunmap() out of nested_release_page() and into callers. > Â* Made vmcs_field_to_offset_table initialization more readable. > Â* Moved constants in vmx.c and to include files, as requested. > Â* Fixed wrong MOV_SS check in handle_launch_or_resume(). > Â* Fixed page leak in nested_vmx_exit_handled_msr(). > Â* Removed redundant if(nested) check. > Â* Allow turning off nested VMX for one guest (by removing VMX from cpuid). > Â* Fixed the EFER handling code. > > This new set of patches applys to the current KVM trunk (I checked with > 844e6679184180cffa7aca014d672545941ed78e). If you wish, you can also check > out an already-patched version of KVM from the repository > git://github.com/nyh/kvm-nested-vmx.git - take the branch "nvmx8". This branch doesn't even compile: CC [M] drivers/staging/samsung-laptop/samsung-laptop.o LD drivers/staging/se401/built-in.o CC [M] drivers/staging/se401/se401.o LD drivers/staging/serqt_usb2/built-in.o CC [M] drivers/staging/serqt_usb2/serqt_usb2.o LD drivers/staging/slicoss/built-in.o CC [M] drivers/staging/slicoss/slicoss.o LD drivers/staging/sm7xx/built-in.o CC [M] drivers/staging/sm7xx/smtcfb.o LD [M] drivers/staging/sm7xx/sm7xx.o LD drivers/staging/smbfs/built-in.o CC [M] drivers/staging/smbfs/proc.o CC [M] drivers/staging/smbfs/dir.o drivers/staging/smbfs/dir.c:286: error: static declaration of âsmbfs_dentry_operationsâ follows non-static declaration drivers/staging/smbfs/proto.h:42: note: previous declaration of âsmbfs_dentry_operationsâ was here drivers/staging/smbfs/dir.c:294: error: static declaration of âsmbfs_dentry_operations_caseâ follows non-static declaration drivers/staging/smbfs/proto.h:41: note: previous declaration of âsmbfs_dentry_operations_caseâ was here make[3]: *** [drivers/staging/smbfs/dir.o] Error 1 make[2]: *** [drivers/staging/smbfs] Error 2 make[1]: *** [drivers/staging] Error 2 make: *** [drivers] Error 2 juergh@gollum:~/hpq/git/kvm-nested-vmx$ git branch master * nvmx8 juergh@gollum:~/hpq/git/kvm-nested-vmx$ git log -1 commit 445a94a1497ed18a3c4fb94ae231ce7c7b3b637b Author: Nadav Har'El <nyh@xxxxxxxxxx> Date: Wed Jan 26 18:13:26 2011 +0200 Nested VMX patch, v8 It's probably not related to your patch but doesn't make me very comfortable about the stability of the resulting kernel. Can I safely apply your patch to the latest -rc kernel? ...Juerg > > About nested VMX: > ----------------- > > The following 29 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 | Â241 ++ > Âarch/x86/include/asm/kvm_host.h Â|  Â2 > Âarch/x86/include/asm/msr-index.h |  Â9 > Âarch/x86/include/asm/vmx.h    |  31 > Âarch/x86/kvm/svm.c        |  Â6 > Âarch/x86/kvm/vmx.c        | 2496 ++++++++++++++++++++++++++++- > Âarch/x86/kvm/x86.c        |  10 > Âarch/x86/kvm/x86.h        |  Â6 > Â8 files changed, 2760 insertions(+), 41 deletions(-) > > -- > Nadav Har'El > IBM Haifa Research Lab > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at Âhttp://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html