FIXUP: sched/tune: do initialization as a postcore_initicall
authorPatrick Bellasi <patrick.bellasi@arm.com>
Fri, 29 Jul 2016 15:09:03 +0000 (16:09 +0100)
committerAmit Pundir <amit.pundir@linaro.org>
Wed, 14 Sep 2016 09:32:22 +0000 (15:02 +0530)
SchedTune needs to walk the scheduling domains to compute the energy
normalization constants used for PE space filtering. To build such
constants we need the energy model data for each CPU in the system.
However, by walking the SDs as a late initcall stage, the userspace has
been already initialized and it could happen that some CPUs are
hotplugged out.
For example, this could happen if a user-space thermal manager daemon
detects that CPUs are to much hot during the boot process.

To avoid such a race condition we can anticipate the SchedTune
initialization code to be a postcore_initicall. This allows to keep the
SchedTune initialization code as simple as an initcall while still safely
relaying on SDs provided data.

Such calls are executed before user-space is initialized and thus, apart
from the case of unlucky early-init kernel space generated hotplugs,
this solution should be safe enough to get all the data we need.

Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
[jstultz: fwdported to 4.4]
Signed-off-by: John Stultz <john.stultz@linaro.org>
kernel/sched/tune.c

index 644f8e9ee96fdbd2b2db058373bc28ecd6cd2844..bd7f319ce53e10f171fa79bb712527887e8097f6 100644 (file)
@@ -946,4 +946,4 @@ nodata:
        rcu_read_unlock();
        return -EINVAL;
 }
-late_initcall(schedtune_init);
+postcore_initcall(schedtune_init);