Messages in this thread Patch in this message | | | From | Richard Cochran <> | Subject | [PATCH RFC V2 3/6] time: keep track of the pending utc/tai threshold | Date | Fri, 18 May 2012 16:09:55 +0200 |
| |
This patch introduces time keeping variables to track the next mini-epoch between the UTC and TAI timescales. A leap second occurs one second before a mini-epoch. When no leap second is pending, then the epoch is set to the far future, LONG_MAX.
This code will become useful later on for providing correct time surrounding a leap second.
Signed-off-by: Richard Cochran <richardcochran@gmail.com> --- kernel/time/timekeeping.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index d66b213..ac04de4 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -70,6 +70,19 @@ struct timekeeper { /* The raw monotonic time for the CLOCK_MONOTONIC_RAW posix clock. */ struct timespec raw_time; + /* The current TAI - UTC offset */ + time_t tai_offset; + /* The UTC time of the next leap second epoch */ + time_t utc_epoch; + /* Tracks where we stand with regard to leap the second epoch. */ + enum { + LEAP_IDLE, + LEAP_INS_PENDING, + LEAP_INS_DONE, + LEAP_DEL_PENDING, + LEAP_DEL_DONE, + } leap_state; + /* Seqlock for all timekeeper values */ seqlock_t lock; }; @@ -608,6 +621,7 @@ void __init timekeeping_init(void) -boot.tv_sec, -boot.tv_nsec); timekeeper.total_sleep_time.tv_sec = 0; timekeeper.total_sleep_time.tv_nsec = 0; + timekeeper.utc_epoch = LONG_MAX; write_sequnlock_irqrestore(&timekeeper.lock, flags); } -- 1.7.2.5
| |