diff options
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 21cc3b2be023..0f0cf374c775 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -176,11 +176,8 @@ struct cfs_rq { | |||
176 | struct load_weight load; | 176 | struct load_weight load; |
177 | unsigned long nr_running; | 177 | unsigned long nr_running; |
178 | 178 | ||
179 | s64 fair_clock; | ||
180 | u64 exec_clock; | 179 | u64 exec_clock; |
181 | u64 min_vruntime; | 180 | u64 min_vruntime; |
182 | s64 wait_runtime; | ||
183 | unsigned long wait_runtime_overruns, wait_runtime_underruns; | ||
184 | 181 | ||
185 | struct rb_root tasks_timeline; | 182 | struct rb_root tasks_timeline; |
186 | struct rb_node *rb_leftmost; | 183 | struct rb_node *rb_leftmost; |
@@ -389,20 +386,14 @@ static void update_rq_clock(struct rq *rq) | |||
389 | * Debugging: various feature bits | 386 | * Debugging: various feature bits |
390 | */ | 387 | */ |
391 | enum { | 388 | enum { |
392 | SCHED_FEAT_FAIR_SLEEPERS = 1, | 389 | SCHED_FEAT_NEW_FAIR_SLEEPERS = 1, |
393 | SCHED_FEAT_NEW_FAIR_SLEEPERS = 2, | 390 | SCHED_FEAT_START_DEBIT = 2, |
394 | SCHED_FEAT_SLEEPER_AVG = 4, | 391 | SCHED_FEAT_USE_TREE_AVG = 4, |
395 | SCHED_FEAT_SLEEPER_LOAD_AVG = 8, | 392 | SCHED_FEAT_APPROX_AVG = 8, |
396 | SCHED_FEAT_START_DEBIT = 16, | ||
397 | SCHED_FEAT_USE_TREE_AVG = 32, | ||
398 | SCHED_FEAT_APPROX_AVG = 64, | ||
399 | }; | 393 | }; |
400 | 394 | ||
401 | const_debug unsigned int sysctl_sched_features = | 395 | const_debug unsigned int sysctl_sched_features = |
402 | SCHED_FEAT_FAIR_SLEEPERS *0 | | ||
403 | SCHED_FEAT_NEW_FAIR_SLEEPERS *1 | | 396 | SCHED_FEAT_NEW_FAIR_SLEEPERS *1 | |
404 | SCHED_FEAT_SLEEPER_AVG *0 | | ||
405 | SCHED_FEAT_SLEEPER_LOAD_AVG *1 | | ||
406 | SCHED_FEAT_START_DEBIT *1 | | 397 | SCHED_FEAT_START_DEBIT *1 | |
407 | SCHED_FEAT_USE_TREE_AVG *0 | | 398 | SCHED_FEAT_USE_TREE_AVG *0 | |
408 | SCHED_FEAT_APPROX_AVG *0; | 399 | SCHED_FEAT_APPROX_AVG *0; |
@@ -716,15 +707,11 @@ calc_delta_fair(unsigned long delta_exec, struct load_weight *lw) | |||
716 | static inline void update_load_add(struct load_weight *lw, unsigned long inc) | 707 | static inline void update_load_add(struct load_weight *lw, unsigned long inc) |
717 | { | 708 | { |
718 | lw->weight += inc; | 709 | lw->weight += inc; |
719 | if (sched_feat(FAIR_SLEEPERS)) | ||
720 | lw->inv_weight = WMULT_CONST / lw->weight; | ||
721 | } | 710 | } |
722 | 711 | ||
723 | static inline void update_load_sub(struct load_weight *lw, unsigned long dec) | 712 | static inline void update_load_sub(struct load_weight *lw, unsigned long dec) |
724 | { | 713 | { |
725 | lw->weight -= dec; | 714 | lw->weight -= dec; |
726 | if (sched_feat(FAIR_SLEEPERS) && likely(lw->weight)) | ||
727 | lw->inv_weight = WMULT_CONST / lw->weight; | ||
728 | } | 715 | } |
729 | 716 | ||
730 | /* | 717 | /* |
@@ -848,8 +835,6 @@ static void dec_nr_running(struct task_struct *p, struct rq *rq) | |||
848 | 835 | ||
849 | static void set_load_weight(struct task_struct *p) | 836 | static void set_load_weight(struct task_struct *p) |
850 | { | 837 | { |
851 | p->se.wait_runtime = 0; | ||
852 | |||
853 | if (task_has_rt_policy(p)) { | 838 | if (task_has_rt_policy(p)) { |
854 | p->se.load.weight = prio_to_weight[0] * 2; | 839 | p->se.load.weight = prio_to_weight[0] * 2; |
855 | p->se.load.inv_weight = prio_to_wmult[0] >> 1; | 840 | p->se.load.inv_weight = prio_to_wmult[0] >> 1; |
@@ -995,13 +980,9 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu) | |||
995 | { | 980 | { |
996 | int old_cpu = task_cpu(p); | 981 | int old_cpu = task_cpu(p); |
997 | struct rq *old_rq = cpu_rq(old_cpu), *new_rq = cpu_rq(new_cpu); | 982 | struct rq *old_rq = cpu_rq(old_cpu), *new_rq = cpu_rq(new_cpu); |
998 | u64 clock_offset, fair_clock_offset; | 983 | u64 clock_offset; |
999 | 984 | ||
1000 | clock_offset = old_rq->clock - new_rq->clock; | 985 | clock_offset = old_rq->clock - new_rq->clock; |
1001 | fair_clock_offset = old_rq->cfs.fair_clock - new_rq->cfs.fair_clock; | ||
1002 | |||
1003 | if (p->se.wait_start_fair) | ||
1004 | p->se.wait_start_fair -= fair_clock_offset; | ||
1005 | 986 | ||
1006 | #ifdef CONFIG_SCHEDSTATS | 987 | #ifdef CONFIG_SCHEDSTATS |
1007 | if (p->se.wait_start) | 988 | if (p->se.wait_start) |
@@ -1571,15 +1552,12 @@ int fastcall wake_up_state(struct task_struct *p, unsigned int state) | |||
1571 | */ | 1552 | */ |
1572 | static void __sched_fork(struct task_struct *p) | 1553 | static void __sched_fork(struct task_struct *p) |
1573 | { | 1554 | { |
1574 | p->se.wait_start_fair = 0; | ||
1575 | p->se.exec_start = 0; | 1555 | p->se.exec_start = 0; |
1576 | p->se.sum_exec_runtime = 0; | 1556 | p->se.sum_exec_runtime = 0; |
1577 | p->se.prev_sum_exec_runtime = 0; | 1557 | p->se.prev_sum_exec_runtime = 0; |
1578 | p->se.wait_runtime = 0; | ||
1579 | 1558 | ||
1580 | #ifdef CONFIG_SCHEDSTATS | 1559 | #ifdef CONFIG_SCHEDSTATS |
1581 | p->se.wait_start = 0; | 1560 | p->se.wait_start = 0; |
1582 | p->se.sum_wait_runtime = 0; | ||
1583 | p->se.sum_sleep_runtime = 0; | 1561 | p->se.sum_sleep_runtime = 0; |
1584 | p->se.sleep_start = 0; | 1562 | p->se.sleep_start = 0; |
1585 | p->se.block_start = 0; | 1563 | p->se.block_start = 0; |
@@ -1588,8 +1566,6 @@ static void __sched_fork(struct task_struct *p) | |||
1588 | p->se.exec_max = 0; | 1566 | p->se.exec_max = 0; |
1589 | p->se.slice_max = 0; | 1567 | p->se.slice_max = 0; |
1590 | p->se.wait_max = 0; | 1568 | p->se.wait_max = 0; |
1591 | p->se.wait_runtime_overruns = 0; | ||
1592 | p->se.wait_runtime_underruns = 0; | ||
1593 | #endif | 1569 | #endif |
1594 | 1570 | ||
1595 | INIT_LIST_HEAD(&p->run_list); | 1571 | INIT_LIST_HEAD(&p->run_list); |
@@ -6436,7 +6412,6 @@ int in_sched_functions(unsigned long addr) | |||
6436 | static inline void init_cfs_rq(struct cfs_rq *cfs_rq, struct rq *rq) | 6412 | static inline void init_cfs_rq(struct cfs_rq *cfs_rq, struct rq *rq) |
6437 | { | 6413 | { |
6438 | cfs_rq->tasks_timeline = RB_ROOT; | 6414 | cfs_rq->tasks_timeline = RB_ROOT; |
6439 | cfs_rq->fair_clock = 1; | ||
6440 | #ifdef CONFIG_FAIR_GROUP_SCHED | 6415 | #ifdef CONFIG_FAIR_GROUP_SCHED |
6441 | cfs_rq->rq = rq; | 6416 | cfs_rq->rq = rq; |
6442 | #endif | 6417 | #endif |
@@ -6562,15 +6537,12 @@ void normalize_rt_tasks(void) | |||
6562 | read_lock_irq(&tasklist_lock); | 6537 | read_lock_irq(&tasklist_lock); |
6563 | do_each_thread(g, p) { | 6538 | do_each_thread(g, p) { |
6564 | p->se.fair_key = 0; | 6539 | p->se.fair_key = 0; |
6565 | p->se.wait_runtime = 0; | ||
6566 | p->se.exec_start = 0; | 6540 | p->se.exec_start = 0; |
6567 | p->se.wait_start_fair = 0; | ||
6568 | #ifdef CONFIG_SCHEDSTATS | 6541 | #ifdef CONFIG_SCHEDSTATS |
6569 | p->se.wait_start = 0; | 6542 | p->se.wait_start = 0; |
6570 | p->se.sleep_start = 0; | 6543 | p->se.sleep_start = 0; |
6571 | p->se.block_start = 0; | 6544 | p->se.block_start = 0; |
6572 | #endif | 6545 | #endif |
6573 | task_rq(p)->cfs.fair_clock = 0; | ||
6574 | task_rq(p)->clock = 0; | 6546 | task_rq(p)->clock = 0; |
6575 | 6547 | ||
6576 | if (!rt_task(p)) { | 6548 | if (!rt_task(p)) { |