[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] Re: [PATCH RFC] do_settime is backwards?!



Check out the definition of do_div which works strangely.
I was confused by that also, but the code in question
does work (I think!).

> -----Original Message-----
> From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
> [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx]On Behalf Of 
> Rik van Riel
> Sent: Wednesday, August 06, 2008 3:47 PM
> To: Rik van Riel
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [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
>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.