Re: [chrony-dev] [PATCH] Port to MacOS X |
[ Thread Index | Date Index | More chrony.tuxfamily.org/chrony-dev Archives ]
Think I fixed all the things commented on. I removed the nanosecond calls/conversions so the patch to the driver is now much simpler.
Attachment:
0001-MacOS-X-driver-ported-from-NetBSD.patch
Description: Binary data
> On 10/06/2015, at 8:21 pm, Miroslav Lichvar <mlichvar@xxxxxxxxxx> wrote: > > This looks pretty good. Some comments are inline. > > I'm planning to make a 2.1 prerelease today or tomorrow (to have a new > release before the next leap second), but I think this could be > included in the final release if it's ready in time. > > On Wed, Jun 10, 2015 at 03:43:23AM +1200, Bryan Christianson wrote: >> sys_macos.c | 394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> sys_macos.h | 36 ++++++ > > To avoid confusion with the older Mac OS system, would it make sense > to rename the files to sys_macosx.* or maybe sys_osx.*? I'm not sure > how developers usually call it. > > Also, please mention in the commit message that it's based on the > NetBSD driver, so it's clear where the old copyrights came from. > >> clean : >> - -rm -f *.o *.s chronyc chronyd core *~ chrony.info chrony.html chrony.txt >> + -rm -f *.o *.s chronyc chronyd core *~ chrony.info chrony.html chrony.txt config.* >> -rm -rf .deps >> + -rm -rf docheck.dSYM > > What creates the config.* and docheck.dSYM files? > >> @@ -112,6 +113,8 @@ install: chronyd chronyc chrony.txt >> chmod 644 $(DESTDIR)$(DOCDIR)/COPYING >> cp README $(DESTDIR)$(DOCDIR)/README >> chmod 644 $(DESTDIR)$(DOCDIR)/README >> + cp chrony.1 $(DESTDIR)$(MANDIR)/man1 >> + chmod 644 $(DESTDIR)$(MANDIR)/man1/chrony.1 > > This looks like a parial revert of a commit added after 2.0, it > probably shouldn't be in this patch :). > >> + Darwin-* ) >> + EXTRA_OBJECTS="sys_macos.o" >> + MYLDFLAGS="-lresolv" $MYLDFLAGS > > The system specific libraries should be in EXTRA_LIBS, MYLDFLAGS is > for user specified flags. > > Also, please consider using an add_def call here similarly to the > other systems (other than NetBSD) to have a define which could be used > in the C files instead of __APPLE__. > >> --- /dev/null >> +++ b/sys_macos.c >> @@ -0,0 +1,394 @@ >> + ======================================================================= >> + >> + Driver file for the MacOS operating system. >> + */ > > Mac OS X to avoid any confusion? > >> +static inline void >> +ts_add_double(struct timespec *a, const struct timespec *b, double c) >> +{ >> + time_t secs; >> + time_t nsecs; >> + > > The indentation is off here and there is also trailing whitespace. > >> + secs = (time_t)c; >> + nsecs = (c - (time_t)c) * 1E9; >> + >> + secs += b->tv_sec; >> + nsecs += b->tv_nsec; >> + >> + if(nsecs >= 1E9) { >> + nsecs -= 1E9; >> + secs++; >> + } > > Shouldn't 1E9 be 1000000000 here to avoid unnecessary conversions > to/from double? > >> +/* ================================================== */ >> + >> +#include <mach/clock.h> >> +#include <mach/mach.h> > > There should go to the beginning of the file. > >> +static inline void >> +getwallclock(struct timespec *ts) >> +{ >> +#if 0 >> + struct timeval tv; >> + >> + if (gettimeofday(&tv, NULL) < 0) { >> + LOG_FATAL(LOGF_SysMacOS, "gettimeofday() failed"); >> + } >> + >> + ts->tv_sec = tv.tv_sec; >> + ts->tv_nsec = tv.tv_usec * 1000; >> +#else >> + clock_serv_t cclock; >> + mach_timespec_t mts; >> + >> + host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); >> + clock_get_time(cclock, &mts); >> + mach_port_deallocate(mach_task_self(), cclock); >> + >> + ts->tv_sec = mts.tv_sec; >> + ts->tv_nsec = mts.tv_nsec; >> +#endif > > Hm, is clock_get_time() used here to get timestamps with nanosecond > resolution? How fast are the host_get_clock_service() and > mach_port_deallocate() calls? > > If the T0 and T1 timestamps are used only to calculate the accrued > offset with frequency offset in few tens of ppm, I'm not sure > nanosecond resolution would improve anything here. I'd prefer to keep > the code simple and avoid any timeval<->timespec conversions until the > chrony code is converted to use timespec everywhere. > >> + /* At this point, we need to round the required adjustment the >> + same way the kernel does. */ >> + >> + delta = adjust_required * 1E6; >> + if (delta > kern_bigadj || delta < -kern_bigadj) >> + tickdelta = 10 * kern_tickadj; >> + else >> + tickdelta = kern_tickadj; >> + if (delta % tickdelta) >> + delta = delta / tickdelta * tickdelta; > > Does the rounding need to be the same as in the NetBSD driver? Do you > see any clock instability when it's removed? > >> +void >> +SYS_MacOS_Initialise(void) >> +{ >> + size_t len; >> + struct clockinfo clockinfo; >> + int mib[2]; >> + >> + mib[0] = CTL_KERN; >> + mib[1] = KERN_CLOCKRATE; >> + >> + len = sizeof(clockinfo); >> + int result = sysctl(mib, 2, &clockinfo, &len, NULL, 0); > > The indentation is off here and the result declaration should be at > the beginning of the function. > > -- > Miroslav Lichvar > > -- > To unsubscribe email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "unsubscribe" in the subject. > For help email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "help" in the subject. > Trouble? Email listmaster@xxxxxxxxxxxxxxxxxxxx. >
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |