Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6c0c943 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Ingo Molnar
Browse files

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: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: John Stultz <john.stultz@linaro.org>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 066361a7
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -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);