[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] hvm: Correct RTC time offset update error due to tm->tm_year
Thanks a lot for your reply, Ian. I guess there is misunderstanding here, see following, The Linux kernel's version of mktime and Xen's version both differ from standard C/POSIX defined function (in fact I expect Xen's is derived from Linux's). Not least because they take a bunch of values instead of a struct tm as arguments (i.e. they take unsigned int year, not tm->tm_year). Yes, Xen's is same as Linux's. Thanks, my original aim is to address an issue in rtc_set_time of \xen\arch\x86\hvm\rtc.c. (at least I thought it was, need your confirmation :-) )If you wanted to compare Xen vs. a POSIX compliant mktime you'd probably want the libc version. The Xen and Linux mktime()s certainly differ substantially from the eglibc one. Yes, the comments does not mention of offsetting anything by 1900, and this is the reason why I created the patch. In \xen\arch\x86\hvm\rtc.c, rtc_set_time call mktime to calculate the seconds since 1970/01/01, the input parameters of mktime are required to be in normal date format. Such as: year=1980, mon=12, day=31, hour=23, min=59, sec=59. (Just like Linux)I don't think you can expect that the in-kernel mktime necessarily has the same interface as POSIX documents, there is certainly no particular reason why they should or must (a kernel is not a POSIX environment). The comment preceding Xen's mktime makes no mention of offsetting anything by 1900 (or anything else) and I believe its implementation is consistent with its defined interface. However, current xen code has some problem when dealing with tm->tm_year, see following, 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, tm->tm_hour, tm->tm_min, tm->tm_sec); (For example, if current time is 2012/12/31, tm->tm_year is 112 here)To meet the requirement of Xen's mktime, tm->tm_year should be changed to tm->tm_year+1900 when calling mktime in Xen. See following, after = mktime(tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); Thanks, Annie Ian.See following diff file which is created between mktime of linux and mktime of xen, (I did some tab/space format changes for comparison)diff linux-mktime.c xen-mktime.c 2,4c2,4 < mktime(const unsigned int year0, const unsigned int mon0, < const unsigned int day, const unsigned int hour, < const unsigned int min, const unsigned int sec) --- > mktime (unsigned int year, unsigned int mon, > unsigned int day, unsigned int hour, > unsigned int min, unsigned int sec) 6,8c6 < unsigned int mon = mon0, year = year0; < < /* 1..12 -> 11,12,1..10 */ --- > /* 1..12 -> 11,12,1..10: put Feb last since it has a leap day. */ 10c8 < mon += 12; /* Puts Feb last since it has leap day */ --- > mon += 12; 21d18 < Thanks Anniebest regards yang _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |