Skip to content

Commit

Permalink
timekeeping: Hold timekeepering locks in do_adjtimex and hardpps
Browse files Browse the repository at this point in the history
In moving the NTP state to be protected by the timekeeping locks,
be sure to acquire the timekeeping locks prior to calling
ntp functions.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
  • Loading branch information
John Stultz committed Apr 4, 2013
1 parent cef9037 commit 06c017f
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions kernel/time/timekeeping.c
Original file line number Diff line number Diff line change
@@ -787,10 +787,10 @@ void __init timekeeping_init(void)
boot.tv_nsec = 0;
}

ntp_init();

raw_spin_lock_irqsave(&timekeeper_lock, flags);
write_seqcount_begin(&timekeeper_seq);
ntp_init();

clock = clocksource_default_clock();
if (clock->enable)
clock->enable(clock);
@@ -1618,6 +1618,7 @@ EXPORT_SYMBOL_GPL(ktime_get_monotonic_offset);
*/
int do_adjtimex(struct timex *txc)
{
unsigned long flags;
struct timespec ts;
s32 tai, orig_tai;
int ret;
@@ -1641,8 +1642,14 @@ int do_adjtimex(struct timex *txc)
getnstimeofday(&ts);
orig_tai = tai = timekeeping_get_tai_offset();

raw_spin_lock_irqsave(&timekeeper_lock, flags);
write_seqcount_begin(&timekeeper_seq);

ret = __do_adjtimex(txc, &ts, &tai);

write_seqcount_end(&timekeeper_seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);

if (tai != orig_tai)
timekeeping_set_tai_offset(tai);

@@ -1655,7 +1662,15 @@ int do_adjtimex(struct timex *txc)
*/
void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
{
unsigned long flags;

raw_spin_lock_irqsave(&timekeeper_lock, flags);
write_seqcount_begin(&timekeeper_seq);

__hardpps(phase_ts, raw_ts);

write_seqcount_end(&timekeeper_seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
}
EXPORT_SYMBOL(hardpps);
#endif

0 comments on commit 06c017f

Please sign in to comment.