alistair23-linux/kernel/time
John Stultz 96efdcf2d0 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>
2015-06-12 11:15:49 +02:00
..
alarmtimer.c alarmtimer: Get rid of unused return value 2015-04-22 17:06:52 +02:00
clockevents.c clockevents: Use set/get state helper functions 2015-06-02 14:40:48 +02:00
clocksource.c clocksource: Use current logging style 2015-06-10 11:31:14 +02:00
hrtimer.c clockevents: Stop unused clockevent devices 2015-05-19 16:18:11 +02:00
itimer.c
jiffies.c tick: Move clocksource related stuff to timekeeping.h 2015-04-01 14:22:58 +02:00
Kconfig clockevents: Remove CONFIG_GENERIC_CLOCKEVENTS_BUILD 2015-04-01 14:22:57 +02:00
Makefile time: Move timeconst.h into include/generated 2015-05-19 15:13:45 +02:00
ntp.c ntp: Do leapsecond adjustment in adjtimex read path 2015-06-12 11:15:49 +02:00
ntp_internal.h time: Prevent early expiry of hrtimers[CLOCK_REALTIME] at the leap second edge 2015-06-12 11:15:49 +02:00
posix-clock.c
posix-cpu-timers.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
posix-timers.c hrtimer: Get rid of hrtimer_get_res() 2015-04-22 17:06:49 +02:00
sched_clock.c timers, sched/clock: Clean up the code a bit 2015-03-27 08:34:01 +01:00
test_udelay.c
tick-broadcast-hrtimer.c tick: hrtimer-broadcast: Prevent endless restarting when broadcast device is unused 2015-05-05 15:34:21 +02:00
tick-broadcast.c clockevents: Provide functions to set and get the state 2015-06-02 14:40:47 +02:00
tick-common.c clockevents: Use set/get state helper functions 2015-06-02 14:40:48 +02:00
tick-internal.h clockevents: Rename state to state_use_accessors 2015-06-02 16:56:42 +02:00
tick-oneshot.c clockevents: Provide functions to set and get the state 2015-06-02 14:40:47 +02:00
tick-sched.c nohz: Fix !HIGH_RES_TIMERS hang 2015-05-07 16:15:50 +02:00
tick-sched.h tick: Nohz: Rework next timer evaluation 2015-04-22 17:06:50 +02:00
time.c time: Refactor usecs_to_jiffies 2015-06-10 11:31:13 +02:00
timeconst.bc time: Move timeconst.h into include/generated 2015-05-19 15:13:45 +02:00
timeconv.c
timecounter.c timecounter: keep track of accumulated fractional nanoseconds 2014-12-30 18:29:27 -05:00
timekeeping.c time: Prevent early expiry of hrtimers[CLOCK_REALTIME] at the leap second edge 2015-06-12 11:15:49 +02:00
timekeeping.h hrtimer: Make offset update smarter 2015-04-22 17:06:49 +02:00
timekeeping_debug.c
timekeeping_internal.h
timer.c tracing: timer: Add deferrable flag to timer_start 2015-05-22 10:36:06 -07:00
timer_list.c clockevents: Introduce CLOCK_EVT_STATE_ONESHOT_STOPPED state 2015-05-19 16:18:02 +02:00
timer_stats.c