aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sched.h8
-rw-r--r--kernel/sched/core.c7
-rw-r--r--kernel/sched/fair.c13
-rw-r--r--kernel/sched/sched.h9
4 files changed, 32 insertions, 5 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index e483ccb08ce6..e1581a029e3d 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1168,7 +1168,13 @@ struct sched_entity {
1168 /* rq "owned" by this entity/group: */ 1168 /* rq "owned" by this entity/group: */
1169 struct cfs_rq *my_q; 1169 struct cfs_rq *my_q;
1170#endif 1170#endif
1171#ifdef CONFIG_SMP 1171/*
1172 * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
1173 * removed when useful for applications beyond shares distribution (e.g.
1174 * load-balance).
1175 */
1176#if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)
1177 /* Per-entity load-tracking */
1172 struct sched_avg avg; 1178 struct sched_avg avg;
1173#endif 1179#endif
1174}; 1180};
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index f26860074ef2..5dae0d252ff7 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1526,7 +1526,12 @@ static void __sched_fork(struct task_struct *p)
1526 p->se.vruntime = 0; 1526 p->se.vruntime = 0;
1527 INIT_LIST_HEAD(&p->se.group_node); 1527 INIT_LIST_HEAD(&p->se.group_node);
1528 1528
1529#ifdef CONFIG_SMP 1529/*
1530 * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
1531 * removed when useful for applications beyond shares distribution (e.g.
1532 * load-balance).
1533 */
1534#if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)
1530 p->se.avg.runnable_avg_period = 0; 1535 p->se.avg.runnable_avg_period = 0;
1531 p->se.avg.runnable_avg_sum = 0; 1536 p->se.avg.runnable_avg_sum = 0;
1532#endif 1537#endif
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 6ecf455fd95b..3e6a3531fa90 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -882,7 +882,8 @@ static inline void update_cfs_shares(struct cfs_rq *cfs_rq)
882} 882}
883#endif /* CONFIG_FAIR_GROUP_SCHED */ 883#endif /* CONFIG_FAIR_GROUP_SCHED */
884 884
885#ifdef CONFIG_SMP 885/* Only depends on SMP, FAIR_GROUP_SCHED may be removed when useful in lb */
886#if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)
886/* 887/*
887 * We choose a half-life close to 1 scheduling period. 888 * We choose a half-life close to 1 scheduling period.
888 * Note: The tables below are dependent on this value. 889 * Note: The tables below are dependent on this value.
@@ -3174,6 +3175,12 @@ unlock:
3174} 3175}
3175 3176
3176/* 3177/*
3178 * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
3179 * removed when useful for applications beyond shares distribution (e.g.
3180 * load-balance).
3181 */
3182#ifdef CONFIG_FAIR_GROUP_SCHED
3183/*
3177 * Called immediately before a task is migrated to a new cpu; task_cpu(p) and 3184 * Called immediately before a task is migrated to a new cpu; task_cpu(p) and
3178 * cfs_rq_of(p) references at time of call are still valid and identify the 3185 * cfs_rq_of(p) references at time of call are still valid and identify the
3179 * previous cpu. However, the caller only guarantees p->pi_lock is held; no 3186 * previous cpu. However, the caller only guarantees p->pi_lock is held; no
@@ -3196,6 +3203,7 @@ migrate_task_rq_fair(struct task_struct *p, int next_cpu)
3196 atomic64_add(se->avg.load_avg_contrib, &cfs_rq->removed_load); 3203 atomic64_add(se->avg.load_avg_contrib, &cfs_rq->removed_load);
3197 } 3204 }
3198} 3205}
3206#endif
3199#endif /* CONFIG_SMP */ 3207#endif /* CONFIG_SMP */
3200 3208
3201static unsigned long 3209static unsigned long
@@ -5773,8 +5781,9 @@ const struct sched_class fair_sched_class = {
5773 5781
5774#ifdef CONFIG_SMP 5782#ifdef CONFIG_SMP
5775 .select_task_rq = select_task_rq_fair, 5783 .select_task_rq = select_task_rq_fair,
5784#ifdef CONFIG_FAIR_GROUP_SCHED
5776 .migrate_task_rq = migrate_task_rq_fair, 5785 .migrate_task_rq = migrate_task_rq_fair,
5777 5786#endif
5778 .rq_online = rq_online_fair, 5787 .rq_online = rq_online_fair,
5779 .rq_offline = rq_offline_fair, 5788 .rq_offline = rq_offline_fair,
5780 5789
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 0a75a430ca77..5eca173b563f 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -225,6 +225,12 @@ struct cfs_rq {
225#endif 225#endif
226 226
227#ifdef CONFIG_SMP 227#ifdef CONFIG_SMP
228/*
229 * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be
230 * removed when useful for applications beyond shares distribution (e.g.
231 * load-balance).
232 */
233#ifdef CONFIG_FAIR_GROUP_SCHED
228 /* 234 /*
229 * CFS Load tracking 235 * CFS Load tracking
230 * Under CFS, load is tracked on a per-entity basis and aggregated up. 236 * Under CFS, load is tracked on a per-entity basis and aggregated up.
@@ -234,7 +240,8 @@ struct cfs_rq {
234 u64 runnable_load_avg, blocked_load_avg; 240 u64 runnable_load_avg, blocked_load_avg;
235 atomic64_t decay_counter, removed_load; 241 atomic64_t decay_counter, removed_load;
236 u64 last_decay; 242 u64 last_decay;
237 243#endif /* CONFIG_FAIR_GROUP_SCHED */
244/* These always depend on CONFIG_FAIR_GROUP_SCHED */
238#ifdef CONFIG_FAIR_GROUP_SCHED 245#ifdef CONFIG_FAIR_GROUP_SCHED
239 u32 tg_runnable_contrib; 246 u32 tg_runnable_contrib;
240 u64 tg_load_contrib; 247 u64 tg_load_contrib;