diff options
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 17e4391ec2de..b56d1505d058 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -1507,8 +1507,45 @@ static int tg_nop(struct task_group *tg, void *data) | |||
1507 | #endif | 1507 | #endif |
1508 | 1508 | ||
1509 | #ifdef CONFIG_SMP | 1509 | #ifdef CONFIG_SMP |
1510 | static unsigned long source_load(int cpu, int type); | 1510 | /* Used instead of source_load when we know the type == 0 */ |
1511 | static unsigned long target_load(int cpu, int type); | 1511 | static unsigned long weighted_cpuload(const int cpu) |
1512 | { | ||
1513 | return cpu_rq(cpu)->load.weight; | ||
1514 | } | ||
1515 | |||
1516 | /* | ||
1517 | * Return a low guess at the load of a migration-source cpu weighted | ||
1518 | * according to the scheduling class and "nice" value. | ||
1519 | * | ||
1520 | * We want to under-estimate the load of migration sources, to | ||
1521 | * balance conservatively. | ||
1522 | */ | ||
1523 | static unsigned long source_load(int cpu, int type) | ||
1524 | { | ||
1525 | struct rq *rq = cpu_rq(cpu); | ||
1526 | unsigned long total = weighted_cpuload(cpu); | ||
1527 | |||
1528 | if (type == 0 || !sched_feat(LB_BIAS)) | ||
1529 | return total; | ||
1530 | |||
1531 | return min(rq->cpu_load[type-1], total); | ||
1532 | } | ||
1533 | |||
1534 | /* | ||
1535 | * Return a high guess at the load of a migration-target cpu weighted | ||
1536 | * according to the scheduling class and "nice" value. | ||
1537 | */ | ||
1538 | static unsigned long target_load(int cpu, int type) | ||
1539 | { | ||
1540 | struct rq *rq = cpu_rq(cpu); | ||
1541 | unsigned long total = weighted_cpuload(cpu); | ||
1542 | |||
1543 | if (type == 0 || !sched_feat(LB_BIAS)) | ||
1544 | return total; | ||
1545 | |||
1546 | return max(rq->cpu_load[type-1], total); | ||
1547 | } | ||
1548 | |||
1512 | static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); | 1549 | static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); |
1513 | 1550 | ||
1514 | static unsigned long cpu_avg_load_per_task(int cpu) | 1551 | static unsigned long cpu_avg_load_per_task(int cpu) |
@@ -1959,13 +1996,6 @@ static inline void check_class_changed(struct rq *rq, struct task_struct *p, | |||
1959 | } | 1996 | } |
1960 | 1997 | ||
1961 | #ifdef CONFIG_SMP | 1998 | #ifdef CONFIG_SMP |
1962 | |||
1963 | /* Used instead of source_load when we know the type == 0 */ | ||
1964 | static unsigned long weighted_cpuload(const int cpu) | ||
1965 | { | ||
1966 | return cpu_rq(cpu)->load.weight; | ||
1967 | } | ||
1968 | |||
1969 | /* | 1999 | /* |
1970 | * Is this task likely cache-hot: | 2000 | * Is this task likely cache-hot: |
1971 | */ | 2001 | */ |
@@ -2241,39 +2271,6 @@ void kick_process(struct task_struct *p) | |||
2241 | EXPORT_SYMBOL_GPL(kick_process); | 2271 | EXPORT_SYMBOL_GPL(kick_process); |
2242 | 2272 | ||
2243 | /* | 2273 | /* |
2244 | * Return a low guess at the load of a migration-source cpu weighted | ||
2245 | * according to the scheduling class and "nice" value. | ||
2246 | * | ||
2247 | * We want to under-estimate the load of migration sources, to | ||
2248 | * balance conservatively. | ||
2249 | */ | ||
2250 | static unsigned long source_load(int cpu, int type) | ||
2251 | { | ||
2252 | struct rq *rq = cpu_rq(cpu); | ||
2253 | unsigned long total = weighted_cpuload(cpu); | ||
2254 | |||
2255 | if (type == 0 || !sched_feat(LB_BIAS)) | ||
2256 | return total; | ||
2257 | |||
2258 | return min(rq->cpu_load[type-1], total); | ||
2259 | } | ||
2260 | |||
2261 | /* | ||
2262 | * Return a high guess at the load of a migration-target cpu weighted | ||
2263 | * according to the scheduling class and "nice" value. | ||
2264 | */ | ||
2265 | static unsigned long target_load(int cpu, int type) | ||
2266 | { | ||
2267 | struct rq *rq = cpu_rq(cpu); | ||
2268 | unsigned long total = weighted_cpuload(cpu); | ||
2269 | |||
2270 | if (type == 0 || !sched_feat(LB_BIAS)) | ||
2271 | return total; | ||
2272 | |||
2273 | return max(rq->cpu_load[type-1], total); | ||
2274 | } | ||
2275 | |||
2276 | /* | ||
2277 | * find_idlest_group finds and returns the least busy CPU group within the | 2274 | * find_idlest_group finds and returns the least busy CPU group within the |
2278 | * domain. | 2275 | * domain. |
2279 | */ | 2276 | */ |