summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorPatrick Bellasi <patrick.bellasi@arm.com>2016-07-29 15:19:41 +0100
committerJohn Stultz <john.stultz@linaro.org>2016-08-10 15:21:52 -0700
commit7f8f24a0eafe312899818cc07af8e9f1b33d9c39 (patch)
tree832b0d5ec9ef6bb0fe6b38566f3ffd86331bbcc0 /kernel
parent274bbcfbe44127c5575ed847d48d201a66cc29ce (diff)
sched/tune: use a single initialisation function
With the introduction of initialization function required to compute the energy normalization constants from DTB at boot time, we have now a late_initcall which is already used by SchedTune. This patch consolidate within that function the other initialization bits which was previously deferred to the first CGroup creation. Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com> [jstultz: fwdported to 4.4] Signed-off-by: John Stultz <john.stultz@linaro.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/tune.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/kernel/sched/tune.c b/kernel/sched/tune.c
index 6d5fbde9c70e..a691b8db2888 100644
--- a/kernel/sched/tune.c
+++ b/kernel/sched/tune.c
@@ -410,8 +410,6 @@ boost_write(struct cgroup_subsys_state *css, struct cftype *cft,
s64 boost)
{
struct schedtune *st = css_st(css);
- unsigned threshold_idx;
- int boost_pct;
if (boost < -100 || boost > 100)
return -EINVAL;
@@ -456,33 +454,14 @@ schedtune_boostgroup_init(struct schedtune *st)
return 0;
}
-static int
-schedtune_init(void)
-{
- struct boost_groups *bg;
- int cpu;
-
- /* Initialize the per CPU boost groups */
- for_each_possible_cpu(cpu) {
- bg = &per_cpu(cpu_boost_groups, cpu);
- memset(bg, 0, sizeof(struct boost_groups));
- }
-
- pr_info(" schedtune configured to support %d boost groups\n",
- BOOSTGROUPS_COUNT);
- return 0;
-}
-
static struct cgroup_subsys_state *
schedtune_css_alloc(struct cgroup_subsys_state *parent_css)
{
struct schedtune *st;
int idx;
- if (!parent_css) {
- schedtune_init();
+ if (!parent_css)
return &root_schedtune.css;
- }
/* Allow only single level hierachies */
if (parent_css != &root_schedtune.css) {
@@ -543,6 +522,22 @@ struct cgroup_subsys schedtune_cgrp_subsys = {
.early_init = 1,
};
+static inline void
+schedtune_init_cgroups(void)
+{
+ struct boost_groups *bg;
+ int cpu;
+
+ /* Initialize the per CPU boost groups */
+ for_each_possible_cpu(cpu) {
+ bg = &per_cpu(cpu_boost_groups, cpu);
+ memset(bg, 0, sizeof(struct boost_groups));
+ }
+
+ pr_info("schedtune: configured to support %d boost groups\n",
+ BOOSTGROUPS_COUNT);
+}
+
#else /* CONFIG_CGROUP_SCHEDTUNE */
int
@@ -690,7 +685,7 @@ schedtune_add_cluster_nrg(
* that bind the EM to the topology information.
*/
static int
-schedtune_init_late(void)
+schedtune_init(void)
{
struct target_nrg *ste = &schedtune_target_nrg;
unsigned long delta_pwr = 0;
@@ -730,10 +725,17 @@ schedtune_init_late(void)
ste->rdiv.m, ste->rdiv.sh1, ste->rdiv.sh2);
schedtune_test_nrg(delta_pwr);
+
+#ifdef CONFIG_CGROUP_SCHEDTUNE
+ schedtune_init_cgroups();
+#else
+ pr_info("schedtune: configured to support global boosting only\n");
+#endif
+
return 0;
nodata:
rcu_read_unlock();
return -EINVAL;
}
-late_initcall(schedtune_init_late);
+late_initcall(schedtune_init);