From: Richard Cochran <richardcochran@gmail.com> To: "Kuwahara,T." <6vvetjsrt26xsrzlh1z0zn4d2grdah@gmail.com> Cc: linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, netdev@vger.kernel.org, Alan Cox <alan@lxorguk.ukuu.org.uk>, Arnd Bergmann <arnd@arndb.de>, Christoph Lameter <cl@linux.com>, David Miller <davem@davemloft.net>, John Stultz <johnstul@us.ibm.com>, Krzysztof Halasa <khc@pm.waw.pl>, Peter Zijlstra <peterz@infradead.org>, Rodolfo Giometti <giometti@linux.it>, Thomas Gleixner <tglx@linutronix.de> Subject: Re: [PATCH V8 02/13] ntp: add ADJ_SETOFFSET mode bit Date: Sat, 8 Jan 2011 18:50:28 +0100 [thread overview] Message-ID: <20110108175028.GA22308@riccoc20.at.omicron.at> (raw) In-Reply-To: <AANLkTini2WdT-1v4k9V3JOZYDkA59P+SyscTe8-fK2Wk@mail.gmail.com> On Sun, Jan 02, 2011 at 05:38:19AM +0900, Kuwahara,T. wrote: > As you know, it conflicts with MOD_PPSMAX. And also, it is logically > the same as ADJ_OFFSET, unless the kernel PLL is enabled explicitly. I choose another bit, for the next version of the patch series. > > So here's my simple solution: > I have read the API documentation in the nanokernel source archive. It explains the (very complex looking) timex structure quite clearly and nicely. Now I am more convinced than ever that adding a new mode bit is the best way to go, as opposed to ADJ_OFFSET/!STA_PLL, because: 1. The mode bits update kernel variables. That is what we want. 2. Clearing STA_PLL means disable adjustments. 3. The range of the timex.offset is way too small. I expand on each point, below. BTW, the API document is also available for online reading here: http://www.slac.stanford.edu/comp/unix/package/rtems/src/ssrlApps/ntpNanoclock/api.htm 1. Looking at the API, the documentation for the bits of the 'modes' field states: These bits control which field of the timex structure are used to update the corresponding kernel variable. The bits may be set in any combination. See the description below for which bits control which variable. With the ADJ_SETOFFSET mode, we are telling the kernel to update the instantaneous value of the 'current time' variable. That usage agrees with the sematics of the other mode bits. 2. The documentation for STA_PLL states: Master enable switch for the PLL/FLL loop. The algorithm is responsive to time and/or frequency updates if set; otherwise, no change in the current time or frequency will be made other than to complete a pending phase adjustment. This bit does not affect the PPS loop. So when we clear this bit, the kernel promises that it will make "no change in the current time." The proposed ADJ_OFFSET/!STA_PLL solution would break this pattern. 3. The timex.offset field is of type "long" and represents either nanoseconds or microseconds. On 32 bit architectures, the maximum possible adjustment would be 2^31 * 10^-6 = 2147.5 seconds which is less than one hour. For the first adjustment of a clock, we want to be able to jump the clock arbitrarily. Not every computer has an RTC, and so some boot up believing that it is still the year 1970. Richard
WARNING: multiple messages have this Message-ID (diff)
From: Richard Cochran <richardcochran-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> To: "Kuwahara,T." <6vvetjsrt26xsrzlh1z0zn4d2grdah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Alan Cox <alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>, Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>, David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>, John Stultz <johnstul-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>, Krzysztof Halasa <khc-9GfyWEdoJtJmR6Xm/wNWPw@public.gmane.org>, Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, Rodolfo Giometti <giometti-k2GhghHVRtY@public.gmane.org>, Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> Subject: Re: [PATCH V8 02/13] ntp: add ADJ_SETOFFSET mode bit Date: Sat, 8 Jan 2011 18:50:28 +0100 [thread overview] Message-ID: <20110108175028.GA22308@riccoc20.at.omicron.at> (raw) In-Reply-To: <AANLkTini2WdT-1v4k9V3JOZYDkA59P+SyscTe8-fK2Wk-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> On Sun, Jan 02, 2011 at 05:38:19AM +0900, Kuwahara,T. wrote: > As you know, it conflicts with MOD_PPSMAX. And also, it is logically > the same as ADJ_OFFSET, unless the kernel PLL is enabled explicitly. I choose another bit, for the next version of the patch series. > > So here's my simple solution: > I have read the API documentation in the nanokernel source archive. It explains the (very complex looking) timex structure quite clearly and nicely. Now I am more convinced than ever that adding a new mode bit is the best way to go, as opposed to ADJ_OFFSET/!STA_PLL, because: 1. The mode bits update kernel variables. That is what we want. 2. Clearing STA_PLL means disable adjustments. 3. The range of the timex.offset is way too small. I expand on each point, below. BTW, the API document is also available for online reading here: http://www.slac.stanford.edu/comp/unix/package/rtems/src/ssrlApps/ntpNanoclock/api.htm 1. Looking at the API, the documentation for the bits of the 'modes' field states: These bits control which field of the timex structure are used to update the corresponding kernel variable. The bits may be set in any combination. See the description below for which bits control which variable. With the ADJ_SETOFFSET mode, we are telling the kernel to update the instantaneous value of the 'current time' variable. That usage agrees with the sematics of the other mode bits. 2. The documentation for STA_PLL states: Master enable switch for the PLL/FLL loop. The algorithm is responsive to time and/or frequency updates if set; otherwise, no change in the current time or frequency will be made other than to complete a pending phase adjustment. This bit does not affect the PPS loop. So when we clear this bit, the kernel promises that it will make "no change in the current time." The proposed ADJ_OFFSET/!STA_PLL solution would break this pattern. 3. The timex.offset field is of type "long" and represents either nanoseconds or microseconds. On 32 bit architectures, the maximum possible adjustment would be 2^31 * 10^-6 = 2147.5 seconds which is less than one hour. For the first adjustment of a clock, we want to be able to jump the clock arbitrarily. Not every computer has an RTC, and so some boot up believing that it is still the year 1970. Richard
next prev parent reply other threads:[~2011-01-08 17:50 UTC|newest] Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-12-31 19:11 [PATCH V8 00/13] ptp: IEEE 1588 hardware clock support Richard Cochran 2010-12-31 19:11 ` Richard Cochran 2010-12-31 19:12 ` [PATCH V8 01/13] time: Introduce timekeeping_inject_offset John Stultz 2010-12-31 19:12 ` John Stultz 2011-01-06 22:00 ` Arnd Bergmann 2011-01-06 22:00 ` Arnd Bergmann 2011-01-06 22:00 ` Arnd Bergmann 2010-12-31 19:12 ` [PATCH V8 02/13] ntp: add ADJ_SETOFFSET mode bit Richard Cochran 2010-12-31 19:12 ` Richard Cochran 2011-01-01 20:38 ` Kuwahara,T. 2011-01-01 20:38 ` Kuwahara,T. 2011-01-08 17:50 ` Richard Cochran [this message] 2011-01-08 17:50 ` Richard Cochran 2011-01-09 21:07 ` Kuwahara,T. 2011-01-09 21:07 ` Kuwahara,T. 2011-01-10 7:17 ` Richard Cochran 2011-01-10 7:17 ` Richard Cochran 2011-01-10 20:47 ` Kuwahara,T. 2011-01-10 20:47 ` Kuwahara,T. 2011-01-10 21:11 ` john stultz 2011-01-11 11:09 ` Richard Cochran 2011-01-10 7:22 ` Richard Cochran 2011-01-10 16:49 ` john stultz 2011-01-10 16:49 ` john stultz 2011-01-10 20:45 ` Kuwahara,T. 2011-01-10 20:45 ` Kuwahara,T. 2011-01-10 21:06 ` john stultz 2011-01-10 21:06 ` john stultz 2011-01-11 20:32 ` Kuwahara,T. 2011-01-11 20:32 ` Kuwahara,T. 2011-01-11 20:55 ` john stultz 2011-01-11 20:55 ` john stultz 2011-01-12 20:39 ` Kuwahara,T. 2011-01-12 20:55 ` john stultz 2011-01-12 20:55 ` john stultz 2010-12-31 19:13 ` [PATCH V8 03/13] posix clocks: introduce a syscall for clock tuning Richard Cochran 2010-12-31 19:13 ` [PATCH V8 04/13] posix_clocks: add clock_adjtime for arm Richard Cochran 2010-12-31 19:13 ` Richard Cochran 2010-12-31 19:14 ` [PATCH V8 05/13] posix_clocks: add clock_adjtime for blackfin Richard Cochran 2010-12-31 19:14 ` [PATCH V8 06/13] posix_clocks: add clock_adjtime for powerpc Richard Cochran 2010-12-31 19:14 ` [PATCH V8 07/13] posix_clocks: add clock_adjtime for x86 Richard Cochran 2010-12-31 19:15 ` [PATCH V8 08/13] posix clocks: cleanup the CLOCK_DISPTACH macro Richard Cochran 2010-12-31 19:15 ` Richard Cochran 2011-01-03 9:29 ` Peter Zijlstra 2011-01-03 11:51 ` Richard Cochran 2011-01-03 11:51 ` Richard Cochran 2011-01-11 12:57 ` Thomas Gleixner 2011-01-11 12:57 ` Thomas Gleixner 2011-01-12 7:37 ` Richard Cochran 2011-01-12 7:37 ` Richard Cochran 2011-01-12 11:16 ` Thomas Gleixner 2011-01-12 11:16 ` Thomas Gleixner 2011-01-12 12:17 ` Richard Cochran 2011-01-13 4:30 ` Richard Cochran 2011-01-13 4:30 ` Richard Cochran 2011-01-13 11:25 ` Thomas Gleixner 2011-01-13 11:25 ` Thomas Gleixner 2010-12-31 19:15 ` [PATCH V8 09/13] posix clocks: introduce dynamic clocks Richard Cochran 2010-12-31 19:15 ` Richard Cochran 2011-01-06 19:56 ` Arnd Bergmann 2011-01-06 19:56 ` Arnd Bergmann 2011-01-07 16:41 ` Richard Cochran 2010-12-31 19:16 ` [PATCH V8 10/13] ptp: Added a brand new class driver for ptp clocks Richard Cochran 2010-12-31 19:16 ` [PATCH V8 11/13] ptp: Added a clock that uses the eTSEC found on the MPC85xx Richard Cochran 2010-12-31 19:16 ` Richard Cochran 2010-12-31 19:17 ` [PATCH V8 12/13] ptp: Added a clock driver for the IXP46x Richard Cochran 2010-12-31 19:17 ` Richard Cochran 2011-01-06 21:01 ` Krzysztof Halasa 2011-01-07 17:07 ` Richard Cochran 2011-01-07 17:07 ` Richard Cochran 2011-01-08 16:25 ` Krzysztof Halasa 2011-01-08 16:25 ` Krzysztof Halasa 2011-01-10 20:24 ` Krzysztof Halasa 2011-01-10 20:24 ` Krzysztof Halasa 2010-12-31 19:17 ` [PATCH V8 13/13] ptp: Added a clock driver for the National Semiconductor PHYTER Richard Cochran 2010-12-31 19:17 ` Richard Cochran
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20110108175028.GA22308@riccoc20.at.omicron.at \ --to=richardcochran@gmail.com \ --cc=6vvetjsrt26xsrzlh1z0zn4d2grdah@gmail.com \ --cc=alan@lxorguk.ukuu.org.uk \ --cc=arnd@arndb.de \ --cc=cl@linux.com \ --cc=davem@davemloft.net \ --cc=giometti@linux.it \ --cc=johnstul@us.ibm.com \ --cc=khc@pm.waw.pl \ --cc=linux-api@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=netdev@vger.kernel.org \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.