diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2012-04-10 11:14:55 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-02-19 08:43:16 +0100 | 
| commit | a6c0c943a15d0b3d6ac33760cb8f95c75f395895 (patch) | |
| tree | 0aa3e39340a97d865a3ce9c4f79e2ac3a389ef04 /kernel/time/ntp.c | |
| parent | 066361a7c58cb6c8b18c7ce0ee8527bb1ce58460 (diff) | |
| download | olio-linux-3.10-a6c0c943a15d0b3d6ac33760cb8f95c75f395895.tar.xz olio-linux-3.10-a6c0c943a15d0b3d6ac33760cb8f95c75f395895.zip  | |
ntp: Make ntp_lock raw
seconds_overflow() is called from hard interrupt context even on
Preempt-RT. This requires the lock to be a raw_spinlock.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: John Stultz <john.stultz@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/time/ntp.c')
| -rw-r--r-- | kernel/time/ntp.c | 26 | 
1 files changed, 13 insertions, 13 deletions
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 24174b4d669..bb1edfaafe3 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c @@ -22,7 +22,7 @@   * NTP timekeeping variables:   */ -DEFINE_SPINLOCK(ntp_lock); +DEFINE_RAW_SPINLOCK(ntp_lock);  /* USER_HZ period (usecs): */ @@ -347,7 +347,7 @@ void ntp_clear(void)  {  	unsigned long flags; -	spin_lock_irqsave(&ntp_lock, flags); +	raw_spin_lock_irqsave(&ntp_lock, flags);  	time_adjust	= 0;		/* stop active adjtime() */  	time_status	|= STA_UNSYNC; @@ -361,7 +361,7 @@ void ntp_clear(void)  	/* Clear PPS state variables */  	pps_clear(); -	spin_unlock_irqrestore(&ntp_lock, flags); +	raw_spin_unlock_irqrestore(&ntp_lock, flags);  } @@ -371,9 +371,9 @@ u64 ntp_tick_length(void)  	unsigned long flags;  	s64 ret; -	spin_lock_irqsave(&ntp_lock, flags); +	raw_spin_lock_irqsave(&ntp_lock, flags);  	ret = tick_length; -	spin_unlock_irqrestore(&ntp_lock, flags); +	raw_spin_unlock_irqrestore(&ntp_lock, flags);  	return ret;  } @@ -394,7 +394,7 @@ int second_overflow(unsigned long secs)  	int leap = 0;  	unsigned long flags; -	spin_lock_irqsave(&ntp_lock, flags); +	raw_spin_lock_irqsave(&ntp_lock, flags);  	/*  	 * Leap second processing. If in leap-insert state at the end of the @@ -478,7 +478,7 @@ int second_overflow(unsigned long secs)  	time_adjust = 0;  out: -	spin_unlock_irqrestore(&ntp_lock, flags); +	raw_spin_unlock_irqrestore(&ntp_lock, flags);  	return leap;  } @@ -660,7 +660,7 @@ int do_adjtimex(struct timex *txc)  	getnstimeofday(&ts); -	spin_lock_irq(&ntp_lock); +	raw_spin_lock_irq(&ntp_lock);  	if (txc->modes & ADJ_ADJTIME) {  		long save_adjust = time_adjust; @@ -702,7 +702,7 @@ int do_adjtimex(struct timex *txc)  	/* fill PPS status fields */  	pps_fill_timex(txc); -	spin_unlock_irq(&ntp_lock); +	raw_spin_unlock_irq(&ntp_lock);  	txc->time.tv_sec = ts.tv_sec;  	txc->time.tv_usec = ts.tv_nsec; @@ -900,7 +900,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)  	pts_norm = pps_normalize_ts(*phase_ts); -	spin_lock_irqsave(&ntp_lock, flags); +	raw_spin_lock_irqsave(&ntp_lock, flags);  	/* clear the error bits, they will be set again if needed */  	time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR); @@ -913,7 +913,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)  	 * just start the frequency interval */  	if (unlikely(pps_fbase.tv_sec == 0)) {  		pps_fbase = *raw_ts; -		spin_unlock_irqrestore(&ntp_lock, flags); +		raw_spin_unlock_irqrestore(&ntp_lock, flags);  		return;  	} @@ -928,7 +928,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)  		time_status |= STA_PPSJITTER;  		/* restart the frequency calibration interval */  		pps_fbase = *raw_ts; -		spin_unlock_irqrestore(&ntp_lock, flags); +		raw_spin_unlock_irqrestore(&ntp_lock, flags);  		pr_err("hardpps: PPSJITTER: bad pulse\n");  		return;  	} @@ -945,7 +945,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)  	hardpps_update_phase(pts_norm.nsec); -	spin_unlock_irqrestore(&ntp_lock, flags); +	raw_spin_unlock_irqrestore(&ntp_lock, flags);  }  EXPORT_SYMBOL(hardpps);  |