All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for John Stultz <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: prarit@redhat.com, jack@suse.cz, john.stultz@linaro.org,
	richardcochran@gmail.com, hpa@zytor.com, bristot@redhat.com,
	linux-kernel@vger.kernel.org, mingo@kernel.org, jbohac@suse.cz,
	tglx@linutronix.de
Subject: [tip:timers/core] ntp: Do leapsecond adjustment in adjtimex read path
Date: Fri, 12 Jun 2015 02:32:31 -0700	[thread overview]
Message-ID: <tip-96efdcf2d080687e041b0353c604b708546689fd@git.kernel.org> (raw)
In-Reply-To: <1434063297-28657-5-git-send-email-john.stultz@linaro.org>

Commit-ID:  96efdcf2d080687e041b0353c604b708546689fd
Gitweb:     http://git.kernel.org/tip/96efdcf2d080687e041b0353c604b708546689fd
Author:     John Stultz <john.stultz@linaro.org>
AuthorDate: Thu, 11 Jun 2015 15:54:56 -0700
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 12 Jun 2015 11:15:49 +0200

ntp: Do leapsecond adjustment in adjtimex read path

Since the leapsecond is applied at tick-time, this means there is a
small window of time at the start of a leap-second where we cross into
the next second before applying the leap.

This patch modified adjtimex so that the leap-second is applied on the
second edge. Providing more correct leapsecond behavior.

This does make it so that adjtimex()'s returned time values can be
inconsistent with time values read from gettimeofday() or
clock_gettime(CLOCK_REALTIME,...)  for a brief period of one tick at
the leapsecond.  However, those other interfaces do not provide the
TIME_OOP time_state return that adjtimex() provides, which allows the
leapsecond to be properly represented. They instead only see a time
discontinuity, and cannot tell the first 23:59:59 from the repeated
23:59:59 leap second.

This seems like a reasonable tradeoff given clock_gettime() /
gettimeofday() cannot properly represent a leapsecond, and users
likely care more about performance, while folks who are using
adjtimex() more likely care about leap-second correctness.

Signed-off-by: John Stultz <john.stultz@linaro.org>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Daniel Bristot de Oliveira <bristot@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Jiri Bohac <jbohac@suse.cz>
Cc: Ingo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/r/1434063297-28657-5-git-send-email-john.stultz@linaro.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 kernel/time/ntp.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index 033743e..fb4d98c 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -740,6 +740,24 @@ int __do_adjtimex(struct timex *txc, struct timespec64 *ts, s32 *time_tai)
 	if (!(time_status & STA_NANO))
 		txc->time.tv_usec /= NSEC_PER_USEC;
 
+	/* Handle leapsec adjustments */
+	if (unlikely(ts->tv_sec >= ntp_next_leap_sec)) {
+		if ((time_state == TIME_INS) && (time_status & STA_INS)) {
+			result = TIME_OOP;
+			txc->tai++;
+			txc->time.tv_sec--;
+		}
+		if ((time_state == TIME_DEL) && (time_status & STA_DEL)) {
+			result = TIME_WAIT;
+			txc->tai--;
+			txc->time.tv_sec++;
+		}
+		if ((time_state == TIME_OOP) &&
+					(ts->tv_sec == ntp_next_leap_sec)) {
+			result = TIME_WAIT;
+		}
+	}
+
 	return result;
 }
 

  parent reply	other threads:[~2015-06-12  9:32 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-11 22:54 [PATCH 0/5 v2] Fixes for leapsecond expiring early ABS_TIME CLOCK_REALTIME timers John Stultz
2015-06-11 22:54 ` [PATCH 1/5] time: Move clock_was_set_seq update to before we update the shadow-timekeeper John Stultz
2015-06-12  9:31   ` [tip:timers/core] time: Move clock_was_set_seq update before updating shadow-timekeeper tip-bot for John Stultz
2015-06-11 22:54 ` [PATCH 2/5] ntp: Introduce and use SECS_PER_DAY macro instead of 86400 John Stultz
2015-06-12  9:31   ` [tip:timers/core] " tip-bot for John Stultz
2015-06-11 22:54 ` [PATCH 3/5] time: Do leapsecond adjustment to avoid early timer expirations John Stultz
2015-06-12  9:32   ` [tip:timers/core] time: Prevent early expiry of hrtimers[ CLOCK_REALTIME] at the leap second edge tip-bot for John Stultz
2015-06-11 22:54 ` [PATCH 4/5] ntp: Do leapsecond adjustment in adjtimex read path John Stultz
2015-06-12  7:37   ` Richard Cochran
2015-06-12  9:32   ` tip-bot for John Stultz [this message]
2015-06-11 22:54 ` [PATCH 5/5] selftests: timers: Add leap-second timer edge testing to leap-a-day.c John Stultz
2015-06-12  9:32   ` [tip:timers/core] " tip-bot for John Stultz
2015-06-12 14:52 ` [PATCH 0/5 v2] Fixes for leapsecond expiring early ABS_TIME CLOCK_REALTIME timers Dave Jones
2015-06-12 14:55   ` Prarit Bhargava
2015-06-12 14:59     ` Dave Jones
2015-06-12 15:02       ` Prarit Bhargava
2015-06-12 17:58   ` John Stultz
2015-06-12 18:06     ` John Stultz
2015-06-12 18:11       ` Thomas Gleixner
2015-06-13  7:17         ` Ingo Molnar
2015-06-15 13:10 ` Prarit Bhargava
2015-06-15 13:46   ` Prarit Bhargava
2015-06-15 18:55     ` John Stultz

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=tip-96efdcf2d080687e041b0353c604b708546689fd@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=bristot@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jack@suse.cz \
    --cc=jbohac@suse.cz \
    --cc=john.stultz@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=prarit@redhat.com \
    --cc=richardcochran@gmail.com \
    --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.