67 lines
2.1 KiB
Diff
67 lines
2.1 KiB
Diff
From 363513520a462b2208bd8fd37a08c198c84d80e2 Mon Sep 17 00:00:00 2001
|
|
From: Steven Rostedt <rostedt@goodmis.org>
|
|
Date: Thu, 2 Aug 2012 18:56:52 -0400
|
|
Subject: [PATCH 282/283] 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>
|
|
---
|
|
kernel/time/ntp.c | 6 ------
|
|
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 09079b7..4b63943 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 03493fd..991259a 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);
|