diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-08-18 14:19:42 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-08-18 14:19:42 +0000 |
commit | 681f8c29aaa375b2b46ff81844b9bfa594538f43 (patch) | |
tree | 9a937489703d83d9a4ba523e71523dbad0e12b87 | |
parent | c8f79b67cf6f03cea76185f11094dbceff67a0ef (diff) | |
download | hqemu-681f8c29aaa375b2b46ff81844b9bfa594538f43.zip hqemu-681f8c29aaa375b2b46ff81844b9bfa594538f43.tar.gz |
APIC: Do not start zero-period timers (Jan Kiszka)
The APIC timer must not start when the initial count is (still) zero.
This caused occasional stalls when booting secondary CPUs of Linux SMP
guests.
Signed-off-by: Jan Kiszka <jan.kiszka@web.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5024 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | hw/apic.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -566,6 +566,8 @@ static void apic_timer_update(APICState *s, int64_t current_time) d = (current_time - s->initial_count_load_time) >> s->count_shift; if (s->lvt[APIC_LVT_TIMER] & APIC_LVT_TIMER_PERIODIC) { + if (!s->initial_count) + goto no_timer; d = ((d / ((uint64_t)s->initial_count + 1)) + 1) * ((uint64_t)s->initial_count + 1); } else { if (d >= s->initial_count) |