diff options
author | Avi Kivity <avi@qumranet.com> | 2008-07-03 14:59:22 +0300 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-10-15 10:15:13 +0200 |
commit | 26eef70c3e8c76e73dff2579c792fc7355f8a291 (patch) | |
tree | 2ec10a2e0f68ca0de77d446fa6d5be9189809e8d /arch/x86 | |
parent | 668f612fa0d8d4120ec5dc0725d7e1ca3152a954 (diff) | |
download | kernel_goldelico_gta04-26eef70c3e8c76e73dff2579c792fc7355f8a291.zip kernel_goldelico_gta04-26eef70c3e8c76e73dff2579c792fc7355f8a291.tar.gz kernel_goldelico_gta04-26eef70c3e8c76e73dff2579c792fc7355f8a291.tar.bz2 |
KVM: Clear exception queue before emulating an instruction
If we're emulating an instruction, either it will succeed, in which case
any previously queued exception will be spurious, or we will requeue the
same exception.
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kvm/x86.c | 2 | ||||
-rw-r--r-- | arch/x86/kvm/x86.h | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 2f0696b..5620df2 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -20,6 +20,7 @@ #include "i8254.h" #include "tss.h" #include "kvm_cache_regs.h" +#include "x86.h" #include <linux/clocksource.h> #include <linux/kvm.h> @@ -2121,6 +2122,7 @@ int emulate_instruction(struct kvm_vcpu *vcpu, int r; struct decode_cache *c; + kvm_clear_exception_queue(vcpu); vcpu->arch.mmio_fault_cr2 = cr2; /* * TODO: fix x86_emulate.c to use guest_read/write_register diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h new file mode 100644 index 0000000..c666649 --- /dev/null +++ b/arch/x86/kvm/x86.h @@ -0,0 +1,11 @@ +#ifndef ARCH_X86_KVM_X86_H +#define ARCH_X86_KVM_X86_H + +#include <linux/kvm_host.h> + +static inline void kvm_clear_exception_queue(struct kvm_vcpu *vcpu) +{ + vcpu->arch.exception.pending = false; +} + +#endif |