summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kvm.c3
-rw-r--r--kvm.h5
-rw-r--r--kvm_x86.c1
3 files changed, 6 insertions, 3 deletions
diff --git a/kvm.c b/kvm.c
index e585df0..d42ba54 100644
--- a/kvm.c
+++ b/kvm.c
@@ -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*/
diff --git a/kvm.h b/kvm.h
index a59eac7..c84015b 100644
--- a/kvm.h
+++ b/kvm.h
@@ -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;
diff --git a/kvm_x86.c b/kvm_x86.c
index d7013a9..87a8562 100644
--- a/kvm_x86.c
+++ b/kvm_x86.c
@@ -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*/