|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] Add a safety valve to the HVM RTC model f
# 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
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<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 <=
|
|
|
|
|