KVM: x86 emulator: add framework for instruction intercepts
authorAvi Kivity <avi@redhat.com>
Mon, 4 Apr 2011 10:39:22 +0000 (12:39 +0200)
committerAvi Kivity <avi@redhat.com>
Wed, 11 May 2011 11:57:00 +0000 (07:57 -0400)
commitc4f035c60dad45ff8813550dc82540dbbc263df2
tree371e0b43f62b8516870bb777dd967de5aa76b206
parentaa97bb4891b1f1b35e7abef8d1e2bbd3dda07159
KVM: x86 emulator: add framework for instruction intercepts

When running in guest mode, certain instructions can be intercepted by
hardware.  This also holds for nested guests running on emulated
virtualization hardware, in particular instructions emulated by kvm
itself.

This patch adds a framework for intercepting instructions.  If an
instruction is marked for interception, and if we're running in guest
mode, a callback is called to check whether an intercept is needed or
not.  The callback is called at three points in time: immediately after
beginning execution, after checking privilge exceptions, and after
checking memory exception.  This suits the different interception points
defined for different instructions and for the various virtualization
instruction sets.

In addition, a new X86EMUL_INTERCEPT is defined, which any callback or
memory access may define, allowing the more complicated intercepts to be
implemented in existing callbacks.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_emulate.h
arch/x86/kvm/emulate.c
arch/x86/kvm/x86.c