aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2012-08-02 18:56:52 -0400
committerSteven Rostedt <rostedt@goodmis.org>2012-08-13 19:20:09 -0400
commitf1475a089e18173be0e4a4a6aed40733e6e6f362 (patch)
treee55f727ca02f213a7028605afe2bd0fbc85b402f
parent337bd8eb56bcc387f6ce878272292d1f3b4c852a (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.c6
-rw-r--r--kernel/time/timekeeping.c4
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);