|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] hvm: correct RTC time offset update error due to tm->tm_year
# HG changeset patch
# User Annie Li <annie.li@xxxxxxxxxx>
# Date 1330619399 0
# Node ID b198ada9689daf31193743b236f819288750296c
# Parent ed898c1d80881e9e3fb07ad7d9b30b70ac407543
hvm: correct RTC time offset update error due to tm->tm_year
tm->tm_year in rtc.c is year number offsetting from 1900. So it is
necessary to add the offset 1900 when calling mktime funtion in
Xen. Otherwise, the calculation result of mktime is incorrect.
Signed-off-by: Annie Li <annie.li@xxxxxxxxxx>
Committed-by: Keir Fraser <keir@xxxxxxx>
---
diff -r ed898c1d8088 -r b198ada9689d xen/arch/x86/hvm/rtc.c
--- a/xen/arch/x86/hvm/rtc.c Thu Mar 01 16:19:29 2012 +0000
+++ b/xen/arch/x86/hvm/rtc.c Thu Mar 01 16:29:59 2012 +0000
@@ -33,6 +33,8 @@
#define vrtc_domain(x) (container_of((x), struct domain, \
arch.hvm_domain.pl_time.vrtc))
#define vrtc_vcpu(x) (pt_global_vcpu_target(vrtc_domain(x)))
+#define epoch_year 1900
+#define get_year(x) (x + epoch_year)
static void rtc_periodic_cb(struct vcpu *v, void *opaque)
{
@@ -165,7 +167,7 @@
ASSERT(spin_is_locked(&s->lock));
- before = mktime(tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
+ before = mktime(get_year(tm->tm_year), tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
tm->tm_sec = from_bcd(s, s->hw.cmos_data[RTC_SECONDS]);
@@ -179,7 +181,7 @@
tm->tm_mon = from_bcd(s, s->hw.cmos_data[RTC_MONTH]) - 1;
tm->tm_year = from_bcd(s, s->hw.cmos_data[RTC_YEAR]) + 100;
- after = mktime(tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
+ after = mktime(get_year(tm->tm_year), tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
/* We use the guest's setting of the RTC to define the local-time
@@ -257,7 +259,7 @@
if ( (unsigned)tm->tm_wday >= 7 )
tm->tm_wday = 0;
days_in_month = get_days_in_month(tm->tm_mon,
- tm->tm_year + 1900);
+ get_year(tm->tm_year));
tm->tm_mday++;
if ( tm->tm_mday < 1 )
{
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |