aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched_fair.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r--kernel/sched_fair.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index bed2f71e63d9..e87f1a52f625 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1074,10 +1074,22 @@ static inline int wake_idle(int cpu, struct task_struct *p)
1074static const struct sched_class fair_sched_class; 1074static const struct sched_class fair_sched_class;
1075 1075
1076#ifdef CONFIG_FAIR_GROUP_SCHED 1076#ifdef CONFIG_FAIR_GROUP_SCHED
1077static unsigned long effective_load(struct task_group *tg, int cpu, 1077static long effective_load(struct task_group *tg, int cpu,
1078 unsigned long wl, unsigned long wg) 1078 long wl, long wg)
1079{ 1079{
1080 struct sched_entity *se = tg->se[cpu]; 1080 struct sched_entity *se = tg->se[cpu];
1081 long more_w;
1082
1083 if (!tg->parent)
1084 return wl;
1085
1086 /*
1087 * Instead of using this increment, also add the difference
1088 * between when the shares were last updated and now.
1089 */
1090 more_w = se->my_q->load.weight - se->my_q->rq_weight;
1091 wl += more_w;
1092 wg += more_w;
1081 1093
1082 for_each_sched_entity(se) { 1094 for_each_sched_entity(se) {
1083#define D(n) (likely(n) ? (n) : 1) 1095#define D(n) (likely(n) ? (n) : 1)
@@ -1086,7 +1098,7 @@ static unsigned long effective_load(struct task_group *tg, int cpu,
1086 1098
1087 S = se->my_q->tg->shares; 1099 S = se->my_q->tg->shares;
1088 s = se->my_q->shares; 1100 s = se->my_q->shares;
1089 rw = se->my_q->load.weight; 1101 rw = se->my_q->rq_weight;
1090 1102
1091 a = S*(rw + wl); 1103 a = S*(rw + wl);
1092 b = S*rw + s*wg; 1104 b = S*rw + s*wg;