Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Apr 2007 13:43:54 -0400
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        freebsd-emulation@FreeBSD.org
Cc:        Alexander Leidinger <Alexander@leidinger.net>, Divacky Roman <rdivacky@FreeBSD.org>, Scot Hetzel <swhetzel@gmail.com>
Subject:   Re: linuxolator: implement settimeofday call on FreeBSD/amd64
Message-ID:  <200704181343.57111.jkim@FreeBSD.org>
In-Reply-To: <790a9fff0704181019m37456143o36c82bd24f7dfe9c@mail.gmail.com>
References:  <790a9fff0612190922t1f4a3fa1m44092944485297f7@mail.gmail.com> <20061219180156.GA87609@stud.fit.vutbr.cz> <790a9fff0704181019m37456143o36c82bd24f7dfe9c@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 18 April 2007 01:19 pm, Scot Hetzel wrote:
> On 12/19/06, Divacky Roman <xdivac02@stud.fit.vutbr.cz> wrote:
> > On Tue, Dec 19, 2006 at 11:22:56AM -0600, Scot Hetzel wrote:
> > > I noticed that the settimeofday call in the linuxolator is
> > > implemented on FreeBSD/i386, but it is missing from
> > > FreeBSD/amd64.  The attached patch implements the function on
> > > FreeBSD/amd64.
> >
> > makes me wonder... what is MD on this code? I dont see anything
>
> I finally figured out what is MD for the settimeofday call.
>
> On FreeBSD/i386:
>
>    struct l_timeval = struct timeval
>
> for FreeBSD/amd64
>
>    struct l_timeval < struct timeval
>
> The reason for this difference is tv_sec is 32 bits on i386 and 64
> bits on amd64.
>
> amd64/include/_types.h:
>    typedef __int64_t       __time_t;               /* time()... */
>
> i386/include/_types.h:
>    typedef __int32_t       __time_t;               /* time()... */
>
> sys/_types.h:
>    typedef long            __suseconds_t;  /* microseconds (signed)
> */
>
> sys/_timeval.h:
>    typedef __time_t        time_t;
>    typedef __suseconds_t   suseconds_t;    /* microseconds (signed)
> */
>
>    struct timeval {
>            time_t          tv_sec;         /* seconds */
>            suseconds_t     tv_usec;        /* and microseconds */
>    };
>
> The reason we can't use freebsd's settimeofday call directly (as
> done in the i386 linuxolator) in the linuxolator for amd64 is that
> the freebsd settimeofday function uses copyin, and since the
> l_timeval stuct is < timeval struct, it ends up copying the tv_usec
> value into tv_sec.

Correct.

> Attached is the current patch to add the settimeofday call to the
> linuxolator for amd64.

It looks okay but it has style changes as well.  I will do some clean 
up and check it in directly to CVS.

Thanks,

Jung-uk Kim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704181343.57111.jkim>