diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2012-08-02 18:56:52 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@rostedt.homelinux.com> | 2012-08-24 22:40:18 -0400 |
commit | f9138eda65cbe5822ac77070a63dcc729611081b (patch) | |
tree | 4e77d29a16e29a089c63df15ccd2e69b884cd20c | |
parent | 51313ec942346ce8cbef5b73cefff269588a3aad (diff) |
time/rt: Fix up leap-second backport for RT changes
The leap-second backport broke RT, and a few changes had to be done.
1) The second_overflow now encompasses ntp_leap_second, and since
second_overflow is called with the xtime_lock held, we can not take that
lock either.
2) Change ktime_get_update_offsets() to use read_seqcount_begin() instead
of read_seq_begin() (and retry).
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | kernel/time/ntp.c | 6 | ||||
-rw-r--r-- | kernel/time/timekeeping.c | 4 |
2 files changed, 2 insertions, 8 deletions
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 09079b7409cf..4b639431f86e 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c @@ -362,9 +362,6 @@ int second_overflow(unsigned long secs) int leap = 0; s64 delta; - raw_spin_lock(&xtime_lock); - write_seqcount_begin(&xtime_seq); - /* * Leap second processing. If in leap-insert state at the end of the * day, the system clock is set back one second; if in leap-delete @@ -405,9 +402,6 @@ int second_overflow(unsigned long secs) break; } - write_seqcount_end(&xtime_seq); - raw_spin_unlock(&xtime_lock); - /* Bump the maxerror field */ time_maxerror += MAXFREQ / NSEC_PER_USEC; if (time_maxerror > NTP_PHASE_LIMIT) { diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 03493fde0607..991259aebd05 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -1269,7 +1269,7 @@ ktime_t ktime_get_update_offsets(ktime_t *real, ktime_t *boot) u64 secs, nsecs; do { - seq = read_seqbegin(&xtime_lock); + seq = read_seqcount_begin(&xtime_seq); secs = xtime.tv_sec; nsecs = xtime.tv_nsec; @@ -1279,7 +1279,7 @@ ktime_t ktime_get_update_offsets(ktime_t *real, ktime_t *boot) *real = offs_real; *boot = offs_boot; - } while (read_seqretry(&xtime_lock, seq)); + } while (read_seqcount_retry(&xtime_seq, seq)); now = ktime_add_ns(ktime_set(secs, 0), nsecs); now = ktime_sub(now, *real); |