diff options
-rw-r--r-- | kvm.c | 3 | ||||
-rw-r--r-- | kvm.h | 5 | ||||
-rw-r--r-- | kvm_x86.c | 1 |
3 files changed, 6 insertions, 3 deletions
@@ -11931,7 +11931,8 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu) hrtimer_cancel(&apic->lapic_timer.timer); #else mutex_enter(&cpu_lock); - cyclic_remove(apic->lapic_timer.kvm_cyclic_id); + if (apic->lapic_timer.active) + cyclic_remove(apic->lapic_timer.kvm_cyclic_id); mutex_exit(&cpu_lock); XXX_KVM_PROBE; #endif /*XXX*/ @@ -344,10 +344,11 @@ struct kvm_timer { #else cyclic_id_t kvm_cyclic_id; cyc_handler_t kvm_cyc_handler; - cyc_time_t kvm_cyc_when; + cyc_time_t kvm_cyc_when; + int active; #endif /*XXX*/ int64_t period; /* unit: ns */ - int32_t pending; /* accumulated triggered timers */ + uint32_t pending; /* accumulated triggered timers */ int reinject; struct kvm_timer_ops *t_ops; struct kvm *kvm; @@ -1473,6 +1473,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu) apic->lapic_timer.kvm_cyc_handler.cyh_func = kvm_timer_fn; apic->lapic_timer.kvm_cyc_handler.cyh_arg = &apic->lapic_timer; apic->lapic_timer.kvm_cyc_handler.cyh_level = CY_HIGH_LEVEL; + apic->lapic_timer.active = 0; XXX_KVM_PROBE; #endif /*XXX*/ |