qemu-devel
[Top][All Lists]
Advanced

[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) {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]