From mboxrd@z Thu Jan 1 00:00:00 1970 From: annie li Subject: Re: [PATCH] hvm: Correct RTC time offset update error due to tm->tm_year Date: Thu, 23 Feb 2012 22:52:43 +0800 Message-ID: <4F4652BB.4020809@oracle.com> References: <4F41F41F.9060601@oracle.com> <4F430201.3040208@oracle.com> <1329908701.2880.26.camel@zakaz.uk.xensource.com> <4F44E94A.2060209@oracle.com> <1329919132.8557.2.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030803060006070505090208" Return-path: In-Reply-To: <1329919132.8557.2.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: Dan Magenheimer , "xen-devel@lists.xensource.com" , Konrad Rzeszutek Wilk , Kurt Hackel , young zhang , "Zhang, Yang Z" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------030803060006070505090208 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 2012-2-22 21:58, Ian Campbell wrote: > > Yes, this looks plausible to me (although I'm no expert on this code). > Something similar happens in rtc_next_second. > > Perhaps it would be better to add a function or macro to do the > conversion, such that it is somewhat self documenting? Or at least make > the 1900 a #define with a suitable name. > I changed the 1900 to a macro and added a new function get_year. The new patch is attached. Thanks Annie --------------030803060006070505090208 Content-Type: text/plain; name="rtc-timeoffset.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="rtc-timeoffset.patch" # HG changeset patch # Parent f2543f449a49b8979becbf6888e009973427089a 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 diff -r f2543f449a49 xen/arch/x86/hvm/rtc.c --- a/xen/arch/x86/hvm/rtc.c Mon Feb 13 17:57:47 2012 +0000 +++ b/xen/arch/x86/hvm/rtc.c Thu Feb 23 18:21:19 2012 +0800 @@ -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 @@ static void rtc_set_time(RTCState *s) 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 @@ static void rtc_set_time(RTCState *s) 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 @@ static void rtc_next_second(RTCState *s) 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 ) { --------------030803060006070505090208 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --------------030803060006070505090208--