This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-changelog] [xen-unstable] Add a safety valve to the HVM RTC model f

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Add a safety valve to the HVM RTC model for big time jumps
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 04 Jun 2010 03:45:19 -0700
Delivery-date: Fri, 04 Jun 2010 03:46:22 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1275642342 -3600
# Node ID 1b6c9732436ba0e688a20609bb908f61d463d0ec
# Parent  88932ba626fe984ee14cb6a0d6c4629fe765f788
Add a safety valve to the HVM RTC model for big time jumps

If xen's time leaps forward by a large amount, the RTC will try to
model a tick for every second that it thinks has passed.  This can
livelock a CPU with a series of timer requests each of which fires
immediately and requests the next one.

This patch treats a delay of more than a day between ticks as a
special case, abandoning the attempt to catch up.  That should be good
enough to avoid livelock but doesn't fix the underlying time problem.

Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
 xen/arch/x86/hvm/rtc.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff -r 88932ba626fe -r 1b6c9732436b xen/arch/x86/hvm/rtc.c
--- a/xen/arch/x86/hvm/rtc.c    Fri Jun 04 10:04:30 2010 +0100
+++ b/xen/arch/x86/hvm/rtc.c    Fri Jun 04 10:05:42 2010 +0100
@@ -281,8 +281,21 @@ static void rtc_update_second(void *opaq
 static void rtc_update_second(void *opaque)
     RTCState *s = opaque;
-    spin_lock(&s->lock);
+    s_time_t now = NOW();
+    spin_lock(&s->lock);
+    /* If we somehow get way out of sync (say, Xen time leaps forward), 
+     * don't livelock the system trying to emulate every second.  Time 
+     * is already in bad trouble, so just skip forward rather than 
+     * trying to sync the RTC registers */
+    if ( unlikely(now - s->next_second_time > SECONDS(86400)) )
+    {
+        dprintk(XENLOG_WARNING, "HVM RTC: dom %u skipping %llu seconds\n",
+                vrtc_domain(s)->domain_id, 
+                (now - s->next_second_time) / SYSTEM_TIME_HZ);
+        s->next_second_time = now;
+    }
     /* if the oscillator is not in normal operation, we do not update */
     if ( (s->hw.cmos_data[RTC_REG_A] & RTC_DIV_CTL) != RTC_REF_CLCK_32KHZ )

Xen-changelog mailing list

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Add a safety valve to the HVM RTC model for big time jumps, Xen patchbot-unstable <=