Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Dec 2020 22:05:53 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Cy Schubert <Cy.Schubert@cschubert.com>
Cc:        Poul-Henning Kamp <phk@phk.freebsd.dk>, freebsd-arch@freebsd.org
Subject:   Re: struct timex and Linux adjtimex()
Message-ID:  <X8lFIX8n7gKMoDk3@kib.kiev.ua>
In-Reply-To: <202012031717.0B3HHalx003916@slippy.cwsent.com>
References:  <202012030523.0B35NsG7003810@slippy.cwsent.com> <X8i4UIzzH7vxkKvH@kib.kiev.ua> <60532.1606990671@critter.freebsd.dk> <X8i715mJUphnxXEo@kib.kiev.ua> <60612.1606991186@critter.freebsd.dk> <202012031717.0B3HHalx003916@slippy.cwsent.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 03, 2020 at 09:17:36AM -0800, Cy Schubert wrote:
> In message <60612.1606991186@critter.freebsd.dk>, "Poul-Henning Kamp" 
> writes:
> > --------
> > Konstantin Belousov writes:
> > > On Thu, Dec 03, 2020 at 10:17:51AM +0000, Poul-Henning Kamp wrote:
> > > > --------
> > > > Konstantin Belousov writes:
> > > > 
> > > > > 1. Implement new syscall, which would take extended struct timex.
> > > > >    ntp_adjtimex() perhaps should be kept for backward compatibility.
> > > > >    [It does not matter where struct timeval is placed in the updated
> > > > >    struct timex, see below].
> > > > 
> > > > That would break all ports with timekeeping software.
> > > Why ?
> >
> > Last I looked they all had "#ifdef FreeBSD use ntp_adjtim()", so if
> > you rename it to ntp_adjtimex() you break them.
> 
> There was no discussion about renaming ntp_adjtime() to ntp_adjtimex(). 
> ntp_adjtime() would remain. A new adjtimex() would be added.
As discussed, we should stay with ntp_adjtime(), it seems.
Libc may provide adjtimex() as an alias if this makes some porting easier.

BTW, I can code the syscall and compat layers, if this would make thinks
easier for everybody.  I can do the addition of the actual flag if you
describe the semantic in more details.

I see the description of ADJ_SETOFFSET in the Linux adjtimex(2) man page:

       ADJ_SETOFFSET (since Linux 2.6.39)
              Add  buf.time  to  the current time.  If buf.status includes the
              ADJ_NANO  flag,  then  buf.time.tv_usec  is  interpreted  as   a
              nanosecond value; otherwise it is interpreted as microseconds.

              The  value  of  buf.time  is  the sum of its two fields, but the
              field buf.time.tv_usec must always be nonnegative.  The  follow‐
              ing  example  shows  how  to normalize a timeval with nanosecond
              resolution.

                   while (buf.time.tv_usec < 0) {
                       buf.time.tv_sec  -= 1;
                       buf.time.tv_usec += 1000000000;
                   }

I do not quite understand the context and internal meaning of the second
paragraph, though.  Kernel should not allow negative tv_usec as the input
parameter, right ?

> 
> >
> > I see no problem having a #define to alias timex() to ntp_adjtime(),
> > but I doubt it would make life easier for anybody.  (I think we used
> > to have that and it got GC'ed.)
> >
> > *If* we want to do this, the right way is to extend struct timex and
> > let ntpadjtime(2) handle the new modes.
> >
> > -- 
> > Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
> > phk@FreeBSD.ORG         | TCP/IP since RFC 956
> > FreeBSD committer       | BSD since 4.3-tahoe    
> > Never attribute to malice what can adequately be explained by incompetence.
> 
> 
> -- 
> Cheers,
> Cy Schubert <Cy.Schubert@cschubert.com>
> FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  https://FreeBSD.org
> NTP:           <cy@nwtime.org>    Web:  https://nwtime.org
> 
> 	The need of the many outweighs the greed of the few.
> 



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