diff --git a/[refs] b/[refs] index a4cac8cb026a..bdf29b17f70b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 49d2d266adff27793fed247a2e9e672d59b6ddc6 +refs/heads/master: 8a0be9ef8225638d26b455788f988c8f84ce9e75 diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index dfae1bf6d5b2..e509dbd7d77f 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -4148,6 +4148,11 @@ static void run_rebalance_domains(struct softirq_action *h) #endif } +static inline int on_null_domain(int cpu) +{ + return !rcu_dereference(cpu_rq(cpu)->sd); +} + /* * Trigger the SCHED_SOFTIRQ if it is time to do periodic load balancing. * @@ -4205,7 +4210,9 @@ static inline void trigger_load_balance(struct rq *rq, int cpu) cpumask_test_cpu(cpu, nohz.cpu_mask)) return; #endif - if (time_after_eq(jiffies, rq->next_balance)) + /* Don't need to rebalance while attached to NULL domain */ + if (time_after_eq(jiffies, rq->next_balance) && + likely(!on_null_domain(cpu))) raise_softirq(SCHED_SOFTIRQ); }