Commit 2eeefc60 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'timers-urgent-2020-12-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer fixes from Ingo Molnar:
 "Update/fix two CPU sanity checks in the hotplug and the boot code, and
  fix a typo in the Kconfig help text.

  [ Context: the first two commits are the result of an ongoing
    annotation+review work of (intentional) tick_do_timer_cpu() data
    races reported by KCSAN, but the annotations aren't fully cooked
    yet ]"

* tag 'timers-urgent-2020-12-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  timekeeping: Fix spelling mistake in Kconfig "fullfill" -> "fulfill"
  tick/sched: Remove bogus boot "safety" check
  tick: Remove pointless cpu valid check in hotplug code
parents 3b80dee7 f6f5cd84
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -141,7 +141,7 @@ config CONTEXT_TRACKING_FORCE
	  dynticks working.
	  dynticks working.


	  This option stands for testing when an arch implements the
	  This option stands for testing when an arch implements the
	  context tracking backend but doesn't yet fullfill all the
	  context tracking backend but doesn't yet fulfill all the
	  requirements to make the full dynticks feature working.
	  requirements to make the full dynticks feature working.
	  Without the full dynticks, there is no way to test the support
	  Without the full dynticks, there is no way to test the support
	  for context tracking and the subsystems that rely on it: RCU
	  for context tracking and the subsystems that rely on it: RCU
+3 −7
Original line number Original line Diff line number Diff line
@@ -407,17 +407,13 @@ EXPORT_SYMBOL_GPL(tick_broadcast_oneshot_control);
/*
/*
 * Transfer the do_timer job away from a dying cpu.
 * Transfer the do_timer job away from a dying cpu.
 *
 *
 * Called with interrupts disabled. Not locking required. If
 * Called with interrupts disabled. No locking required. If
 * tick_do_timer_cpu is owned by this cpu, nothing can change it.
 * tick_do_timer_cpu is owned by this cpu, nothing can change it.
 */
 */
void tick_handover_do_timer(void)
void tick_handover_do_timer(void)
{
{
	if (tick_do_timer_cpu == smp_processor_id()) {
	if (tick_do_timer_cpu == smp_processor_id())
		int cpu = cpumask_first(cpu_online_mask);
		tick_do_timer_cpu = cpumask_first(cpu_online_mask);

		tick_do_timer_cpu = (cpu < nr_cpu_ids) ? cpu :
			TICK_DO_TIMER_NONE;
	}
}
}


/*
/*
+0 −7
Original line number Original line Diff line number Diff line
@@ -989,13 +989,6 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
		 */
		 */
		if (tick_do_timer_cpu == cpu)
		if (tick_do_timer_cpu == cpu)
			return false;
			return false;
		/*
		 * Boot safety: make sure the timekeeping duty has been
		 * assigned before entering dyntick-idle mode,
		 * tick_do_timer_cpu is TICK_DO_TIMER_BOOT
		 */
		if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_BOOT))
			return false;


		/* Should not happen for nohz-full */
		/* Should not happen for nohz-full */
		if (WARN_ON_ONCE(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
		if (WARN_ON_ONCE(tick_do_timer_cpu == TICK_DO_TIMER_NONE))