x86, sched: Don't enable static key when starting secondary CPUs
authorPeter Zijlstra (Intel) <peterz@infradead.org>
Thu, 16 Apr 2020 05:47:44 +0000 (07:47 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 22 Apr 2020 21:10:13 +0000 (23:10 +0200)
commitb56e7d45e80796ca963ac10902245b244d823caf
tree00298f610650324771aa2eec2ebbba47f5fd8cdb
parent23ccee22e834eca236b9a20989caf6905bd6954a
x86, sched: Don't enable static key when starting secondary CPUs

The static key arch_scale_freq_key only needs to be enabled once (at
boot). This change fixes a bug by which the key was enabled every time cpu0
is started, even as a secondary CPU during cpu hotplug. Secondary CPUs are
started from the idle thread: setting a static key from there means
acquiring a lock and may result in sleeping in the idle task, causing CPU
lockup.

Another consequence of this change is that init_counter_refs() is now
called on each CPU correctly; previously the function on_each_cpu() was
used, but it was called at boot when the only online cpu is cpu0.

[ggherdovich@suse.cz: Tested and wrote changelog]
Fixes: 1567c3e3467c ("x86, sched: Add support for frequency invariance")
Reported-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lkml.kernel.org/r/20200416054745.740-4-ggherdovich@suse.cz
arch/x86/kernel/smpboot.c