All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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: link
Be 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.