aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2009-07-09 08:33:51 -0400
committerAvi Kivity <avi@redhat.com>2009-09-10 01:33:13 -0400
commitb59bb7bdf08ee98e0d1f1758901f545655b7a413 (patch)
tree98388d26576288df84d364565bd8c9d0504719d3
parenta205bc19f0d203f31a15bd2f9464ef05f918b77e (diff)
KVM: Move exception handling to the same place as other events
Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--arch/x86/kvm/x86.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 42160b031fcd..11cfd897aac6 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -223,13 +223,6 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code)
223} 223}
224EXPORT_SYMBOL_GPL(kvm_queue_exception_e); 224EXPORT_SYMBOL_GPL(kvm_queue_exception_e);
225 225
226static void __queue_exception(struct kvm_vcpu *vcpu)
227{
228 kvm_x86_ops->queue_exception(vcpu, vcpu->arch.exception.nr,
229 vcpu->arch.exception.has_error_code,
230 vcpu->arch.exception.error_code);
231}
232
233/* 226/*
234 * Load the pae pdptrs. Return true is they are all valid. 227 * Load the pae pdptrs. Return true is they are all valid.
235 */ 228 */
@@ -3491,9 +3484,16 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu)
3491 kvm_x86_ops->update_cr8_intercept(vcpu, tpr, max_irr); 3484 kvm_x86_ops->update_cr8_intercept(vcpu, tpr, max_irr);
3492} 3485}
3493 3486
3494static void inject_pending_irq(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) 3487static void inject_pending_event(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
3495{ 3488{
3496 /* try to reinject previous events if any */ 3489 /* try to reinject previous events if any */
3490 if (vcpu->arch.exception.pending) {
3491 kvm_x86_ops->queue_exception(vcpu, vcpu->arch.exception.nr,
3492 vcpu->arch.exception.has_error_code,
3493 vcpu->arch.exception.error_code);
3494 return;
3495 }
3496
3497 if (vcpu->arch.nmi_injected) { 3497 if (vcpu->arch.nmi_injected) {
3498 kvm_x86_ops->set_nmi(vcpu); 3498 kvm_x86_ops->set_nmi(vcpu);
3499 return; 3499 return;
@@ -3574,10 +3574,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
3574 goto out; 3574 goto out;
3575 } 3575 }
3576 3576
3577 if (vcpu->arch.exception.pending) 3577 inject_pending_event(vcpu, kvm_run);
3578 __queue_exception(vcpu);
3579 else
3580 inject_pending_irq(vcpu, kvm_run);
3581 3578
3582 /* enable NMI/IRQ window open exits if needed */ 3579 /* enable NMI/IRQ window open exits if needed */
3583 if (vcpu->arch.nmi_pending) 3580 if (vcpu->arch.nmi_pending)