Commit-ID:  3676b13e8524c576825fe1e731e347dba0083888
Gitweb:     http://git.kernel.org/tip/3676b13e8524c576825fe1e731e347dba0083888
Author:     Morten Rasmussen <morten.rasmus...@arm.com>
AuthorDate: Mon, 25 Jul 2016 14:34:23 +0100
Committer:  Ingo Molnar <mi...@kernel.org>
CommitDate: Thu, 18 Aug 2016 11:26:54 +0200

sched/core: Pass child domain into sd_init()

If behavioural sched_domain flags depend on topology flags set at higher
domain levels we need a way to update the child domain flags. Moving the
child pointer assignment inside sd_init() should make that possible.

Signed-off-by: Morten Rasmussen <morten.rasmus...@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: Mike Galbraith <efa...@gmx.de>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: dietmar.eggem...@arm.com
Cc: freedom....@mediatek.com
Cc: keita.kobayashi...@renesas.com
Cc: mgalbra...@suse.de
Cc: sgurrapp...@nvidia.com
Cc: vincent.guit...@linaro.org
Cc: yuyang...@intel.com
Link: 
http://lkml.kernel.org/r/1469453670-2660-7-git-send-email-morten.rasmus...@arm.com
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
 kernel/sched/core.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 46bfb90..5739465 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6381,7 +6381,8 @@ static int sched_domains_curr_level;
         SD_SHARE_POWERDOMAIN)
 
 static struct sched_domain *
-sd_init(struct sched_domain_topology_level *tl, int cpu)
+sd_init(struct sched_domain_topology_level *tl,
+       struct sched_domain *child, int cpu)
 {
        struct sched_domain *sd = *per_cpu_ptr(tl->data.sd, cpu);
        int sd_weight, sd_flags = 0;
@@ -6433,6 +6434,7 @@ sd_init(struct sched_domain_topology_level *tl, int cpu)
                .smt_gain               = 0,
                .max_newidle_lb_cost    = 0,
                .next_decay_max_lb_cost = jiffies,
+               .child                  = child,
 #ifdef CONFIG_SCHED_DEBUG
                .name                   = tl->name,
 #endif
@@ -6857,14 +6859,13 @@ struct sched_domain *build_sched_domain(struct 
sched_domain_topology_level *tl,
                const struct cpumask *cpu_map, struct sched_domain_attr *attr,
                struct sched_domain *child, int cpu)
 {
-       struct sched_domain *sd = sd_init(tl, cpu);
+       struct sched_domain *sd = sd_init(tl, child, cpu);
 
        cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu));
        if (child) {
                sd->level = child->level + 1;
                sched_domain_level_max = max(sched_domain_level_max, sd->level);
                child->parent = sd;
-               sd->child = child;
 
                if (!cpumask_subset(sched_domain_span(child),
                                    sched_domain_span(sd))) {

Reply via email to