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>