[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] mc146818rtc: fix timer interrupt reinjection
From: |
Marcelo Tosatti |
Subject: |
[PATCH] mc146818rtc: fix timer interrupt reinjection |
Date: |
Wed, 9 Oct 2019 15:40:14 -0300 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
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 <address@hidden>
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) {
- [PATCH] mc146818rtc: fix timer interrupt reinjection,
Marcelo Tosatti <=