aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index dfae1bf6d5b2..e509dbd7d77f 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4148,6 +4148,11 @@ static void run_rebalance_domains(struct softirq_action *h)
4148#endif 4148#endif
4149} 4149}
4150 4150
4151static inline int on_null_domain(int cpu)
4152{
4153 return !rcu_dereference(cpu_rq(cpu)->sd);
4154}
4155
4151/* 4156/*
4152 * Trigger the SCHED_SOFTIRQ if it is time to do periodic load balancing. 4157 * Trigger the SCHED_SOFTIRQ if it is time to do periodic load balancing.
4153 * 4158 *
@@ -4205,7 +4210,9 @@ static inline void trigger_load_balance(struct rq *rq, int cpu)
4205 cpumask_test_cpu(cpu, nohz.cpu_mask)) 4210 cpumask_test_cpu(cpu, nohz.cpu_mask))
4206 return; 4211 return;
4207#endif 4212#endif
4208 if (time_after_eq(jiffies, rq->next_balance)) 4213 /* Don't need to rebalance while attached to NULL domain */
4214 if (time_after_eq(jiffies, rq->next_balance) &&
4215 likely(!on_null_domain(cpu)))
4209 raise_softirq(SCHED_SOFTIRQ); 4216 raise_softirq(SCHED_SOFTIRQ);
4210} 4217}
4211 4218