|| ||Joerg Roedel <firstname.lastname@example.org> |
|| ||Avi Kivity <email@example.com>, Marcelo Tosatti <firstname.lastname@example.org> |
|| ||[PATCH 0/9] KVM: Make the instruction emulator aware of Nested Virtualization |
|| ||Wed, 24 Nov 2010 19:18:26 +0100|
|| ||<email@example.com>, <firstname.lastname@example.org>|
|| ||Article, Thread
Hi Avi, Hi Marcelo,
here is a patch-set to make the instruction emulator aware of nested
virtualization. It basically works by introducing a new callback into
the x86_ops to check if a decoded instruction must be intercepted. If it
is intercepted the instruction emulator returns straight into the guest.
I am not entirely happy with this solution because it partially
duplicates the code in the x86_emulate_insn function. But there are so
many SVM specific cases that need to be taken care of that I consider
this solution the better one (even when looking at the diff-stat).
Keeping this (SVM-specific) complexity in the SVM specific code is
better than extending the generic instruction emulator code path.
The last patch removes the ugly hacks which were required without this
patch-set to correctly handle the selective-cr0-write intercept.
I appreciate your feedback.
arch/x86/include/asm/kvm_emulate.h | 2 +
arch/x86/include/asm/kvm_host.h | 3 +
arch/x86/kvm/svm.c | 330 ++++++++++++++++++++++++++++++------
arch/x86/kvm/vmx.c | 8 +
arch/x86/kvm/x86.c | 5 +
5 files changed, 297 insertions(+), 51 deletions(-)
Joerg Roedel (9):
KVM: Add infrastructure to emulate instruction intercepts
KVM: SVM: Add checks for CRx read and write intercepts
KVM: SVM: Add checks for DRx read and write intercepts
KVM: SVM: Add intercept checks for descriptor table accesses
KVM: SVM: Add checks for all group 7 instructions
KVM: SVM: Add intercept checks for remaining twobyte instructions
KVM: SVM: Add intercept checks for one-byte instructions
KVM: SVM: Add checks for IO instructions
KVM: SVM: Remove nested sel_cr0_write handling code