[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH RFC] do_settime is backwards?!
This patch fixes an apparent bug in do_settime() that was found while auditing the code to fix an unrelated bug. Signed-off-by: Rik van Riel <riel@xxxxxxxxxx> --- I still hope I am wrong :) On Wed, 6 Aug 2008 17:37:23 -0400 Rik van Riel <riel@xxxxxxxxxx> wrote: > I hope I've overlooked some detail, but just in case I am > right here's a patch to reverse the assignments. > > How did this ever work? Of course, that is still not enough. A u32 has some more bits than a billion, so the wc_nsec variable could be off by as much as 3 seconds... diff -up xen/arch/x86/time.c.backwards xen/arch/x86/time.c --- xen/arch/x86/time.c.backwards 2008-08-06 17:33:26.000000000 -0400 +++ xen/arch/x86/time.c 2008-08-06 17:43:46.000000000 -0400 @@ -819,12 +819,16 @@ void do_settime(unsigned long secs, unsi u32 y, _wc_sec, _wc_nsec; struct domain *d; + /* Calculate nanoseconds */ x = (secs * 1000000000ULL) + (u64)nsecs - system_time_base; + /* Calculate seconds. */ y = do_div(x, 1000000000); + /* Leave the remainder for the nanosecond field. */ + x -= (y * 1000000000); spin_lock(&wc_lock); - wc_sec = _wc_sec = (u32)x; - wc_nsec = _wc_nsec = (u32)y; + wc_sec = _wc_sec = (u32)y; + wc_nsec = _wc_nsec = (u32)x; spin_unlock(&wc_lock); rcu_read_lock(&domlist_read_lock); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |