mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-23 16:53:58 -05:00
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Thomas Gleixner: - Trivial: unused variable removal - Posix-timers: Add the clock ID to the new proc interface to make it useful. The interface is new and should be functional when we reach the final 3.10 release. - Cure a false positive warning in the tick code introduced by the overhaul in 3.10 - Fix for a persistent clock detection regression introduced in this cycle * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: timekeeping: Correct run-time detection of persistent_clock. ntp: Remove unused variable flags in __hardpps posix-timers: Show clock ID in proc file tick: Cure broadcast false positive pending bit warning
This commit is contained in:
commit
81db4dbf59
4 changed files with 16 additions and 2 deletions
|
@ -2118,6 +2118,7 @@ static int show_timer(struct seq_file *m, void *v)
|
||||||
nstr[notify & ~SIGEV_THREAD_ID],
|
nstr[notify & ~SIGEV_THREAD_ID],
|
||||||
(notify & SIGEV_THREAD_ID) ? "tid" : "pid",
|
(notify & SIGEV_THREAD_ID) ? "tid" : "pid",
|
||||||
pid_nr_ns(timer->it_pid, tp->ns));
|
pid_nr_ns(timer->it_pid, tp->ns));
|
||||||
|
seq_printf(m, "ClockID: %d\n", timer->it_clock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -874,7 +874,6 @@ static void hardpps_update_phase(long error)
|
||||||
void __hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
|
void __hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
|
||||||
{
|
{
|
||||||
struct pps_normtime pts_norm, freq_norm;
|
struct pps_normtime pts_norm, freq_norm;
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
pts_norm = pps_normalize_ts(*phase_ts);
|
pts_norm = pps_normalize_ts(*phase_ts);
|
||||||
|
|
||||||
|
|
|
@ -511,6 +511,12 @@ again:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove the current cpu from the pending mask. The event is
|
||||||
|
* delivered immediately in tick_do_broadcast() !
|
||||||
|
*/
|
||||||
|
cpumask_clear_cpu(smp_processor_id(), tick_broadcast_pending_mask);
|
||||||
|
|
||||||
/* Take care of enforced broadcast requests */
|
/* Take care of enforced broadcast requests */
|
||||||
cpumask_or(tmpmask, tmpmask, tick_broadcast_force_mask);
|
cpumask_or(tmpmask, tmpmask, tick_broadcast_force_mask);
|
||||||
cpumask_clear(tick_broadcast_force_mask);
|
cpumask_clear(tick_broadcast_force_mask);
|
||||||
|
@ -575,8 +581,8 @@ void tick_broadcast_oneshot_control(unsigned long reason)
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
|
raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
|
||||||
if (reason == CLOCK_EVT_NOTIFY_BROADCAST_ENTER) {
|
if (reason == CLOCK_EVT_NOTIFY_BROADCAST_ENTER) {
|
||||||
WARN_ON_ONCE(cpumask_test_cpu(cpu, tick_broadcast_pending_mask));
|
|
||||||
if (!cpumask_test_and_set_cpu(cpu, tick_broadcast_oneshot_mask)) {
|
if (!cpumask_test_and_set_cpu(cpu, tick_broadcast_oneshot_mask)) {
|
||||||
|
WARN_ON_ONCE(cpumask_test_cpu(cpu, tick_broadcast_pending_mask));
|
||||||
clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN);
|
clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN);
|
||||||
/*
|
/*
|
||||||
* We only reprogram the broadcast timer if we
|
* We only reprogram the broadcast timer if we
|
||||||
|
|
|
@ -975,6 +975,14 @@ static int timekeeping_suspend(void)
|
||||||
|
|
||||||
read_persistent_clock(&timekeeping_suspend_time);
|
read_persistent_clock(&timekeeping_suspend_time);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On some systems the persistent_clock can not be detected at
|
||||||
|
* timekeeping_init by its return value, so if we see a valid
|
||||||
|
* value returned, update the persistent_clock_exists flag.
|
||||||
|
*/
|
||||||
|
if (timekeeping_suspend_time.tv_sec || timekeeping_suspend_time.tv_nsec)
|
||||||
|
persistent_clock_exist = true;
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&timekeeper_lock, flags);
|
raw_spin_lock_irqsave(&timekeeper_lock, flags);
|
||||||
write_seqcount_begin(&timekeeper_seq);
|
write_seqcount_begin(&timekeeper_seq);
|
||||||
timekeeping_forward_now(tk);
|
timekeeping_forward_now(tk);
|
||||||
|
|
Loading…
Add table
Reference in a new issue