diff options
author | Gleb Natapov <gleb@redhat.com> | 2009-03-23 09:11:44 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-06-10 04:48:33 -0400 |
commit | 09cec754885f900f6aab23801878c0cd217ee1d6 (patch) | |
tree | 3f634b6993af33914b031421e23db67744b84a9f /arch/ia64 | |
parent | 089d034e0c4538d2436512fa64782b91008d4a7c (diff) |
KVM: Timer event should not unconditionally unhalt vcpu.
Currently timer events are processed before entering guest mode. Move it
to main vcpu event loop since timer events should be processed even while
vcpu is halted. Timer may cause interrupt/nmi to be injected and only then
vcpu will be unhalted.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/kvm/kvm-ia64.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index 4623a90e515a..d2a90fd505b0 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -488,10 +488,10 @@ int kvm_emulate_halt(struct kvm_vcpu *vcpu) | |||
488 | hrtimer_cancel(p_ht); | 488 | hrtimer_cancel(p_ht); |
489 | vcpu->arch.ht_active = 0; | 489 | vcpu->arch.ht_active = 0; |
490 | 490 | ||
491 | if (test_and_clear_bit(KVM_REQ_UNHALT, &vcpu->requests)) | 491 | if (test_and_clear_bit(KVM_REQ_UNHALT, &vcpu->requests) || |
492 | kvm_cpu_has_pending_timer(vcpu)) | ||
492 | if (vcpu->arch.mp_state == KVM_MP_STATE_HALTED) | 493 | if (vcpu->arch.mp_state == KVM_MP_STATE_HALTED) |
493 | vcpu->arch.mp_state = | 494 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; |
494 | KVM_MP_STATE_RUNNABLE; | ||
495 | 495 | ||
496 | if (vcpu->arch.mp_state != KVM_MP_STATE_RUNNABLE) | 496 | if (vcpu->arch.mp_state != KVM_MP_STATE_RUNNABLE) |
497 | return -EINTR; | 497 | return -EINTR; |