summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2008-02-24 14:37:50 +0200
committerAvi Kivity <avi@qumranet.com>2008-03-04 15:19:48 +0200
commit0b975a3c2d53829fa978e18fabae7d99031f588f (patch)
tree6423319b2f1e6437cae279bce0aad9d348e055d9
parent24993d53495d1f9b844f8eb3ebd1b9efd3521617 (diff)
downloadlinux-stable-0b975a3c2d53829fa978e18fabae7d99031f588f.tar.gz
linux-stable-0b975a3c2d53829fa978e18fabae7d99031f588f.tar.bz2
linux-stable-0b975a3c2d53829fa978e18fabae7d99031f588f.zip
KVM: Avoid infinite-frequency local apic timer
If the local apic initial count is zero, don't start a an hrtimer with infinite frequency, locking up the host. Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--arch/x86/kvm/lapic.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 2cbee9479ce4..68a6b1511934 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -647,6 +647,10 @@ static void start_apic_timer(struct kvm_lapic *apic)
apic->timer.period = apic_get_reg(apic, APIC_TMICT) *
APIC_BUS_CYCLE_NS * apic->timer.divide_count;
atomic_set(&apic->timer.pending, 0);
+
+ if (!apic->timer.period)
+ return;
+
hrtimer_start(&apic->timer.dev,
ktime_add_ns(now, apic->timer.period),
HRTIMER_MODE_ABS);