commit 369b41359af46bded5799c9ef8be2b641d92e043 broke timer interrupt reinjection when there is no period change by the guest.
In that case, old_period is 0, which ends up zeroing irq_coalesced (counter of reinjected interrupts). The consequence is Windows 7 is unable to synchronize time via NTP. Easily reproducible by playing a fullscreen video with cirrus and VNC. Fix by not updating s->irq_coalesced when old_period is 0. Signed-off-by: Marcelo Tosatti <mtosa...@redhat.com> diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c index 6cb378751b..aabffa8c67 100644 --- a/hw/timer/mc146818rtc.c +++ b/hw/timer/mc146818rtc.c @@ -241,7 +241,10 @@ periodic_timer_update(RTCState *s, int64_t current_time, uint32_t old_period) s->period = period; lost_clock += old_irq_coalesced * old_period; - s->irq_coalesced = lost_clock / s->period; + if (old_period) { + s->irq_coalesced = lost_clock / s->period; + } + lost_clock %= s->period; if (old_irq_coalesced != s->irq_coalesced || old_period != s->period) {