Messages in this thread Patch in this message | | | Date | Sun, 10 Dec 2023 17:21:24 +0800 | From | WangJinchao <> | Subject | [PATCH] sched/fair: merge same code in enqueue_task_fair |
| |
1. The code below is duplicated in two for loops and need to be consolidated 2. Fix the bug where a se's on_rq is true but its parent is not
```c cfs_rq->h_nr_running++; cfs_rq->idle_h_nr_running += idle_h_nr_running;
if (cfs_rq_is_idle(cfs_rq)) idle_h_nr_running = 1;
/* end evaluation on encountering a throttled cfs_rq */ if (cfs_rq_throttled(cfs_rq)) goto enqueue_throttle; ```
Signed-off-by: WangJinchao <wangjinchao@xfusion.com> --- kernel/sched/fair.c | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index d7a3c63a2171..e1373bfd4f2e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6681,30 +6681,15 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) cpufreq_update_util(rq, SCHED_CPUFREQ_IOWAIT); for_each_sched_entity(se) { - if (se->on_rq) - break; cfs_rq = cfs_rq_of(se); - enqueue_entity(cfs_rq, se, flags); - - cfs_rq->h_nr_running++; - cfs_rq->idle_h_nr_running += idle_h_nr_running; - - if (cfs_rq_is_idle(cfs_rq)) - idle_h_nr_running = 1; - - /* end evaluation on encountering a throttled cfs_rq */ - if (cfs_rq_throttled(cfs_rq)) - goto enqueue_throttle; - - flags = ENQUEUE_WAKEUP; - } - - for_each_sched_entity(se) { - cfs_rq = cfs_rq_of(se); - - update_load_avg(cfs_rq, se, UPDATE_TG); - se_update_runnable(se); - update_cfs_group(se); + if (se->on_rq) { + update_load_avg(cfs_rq, se, UPDATE_TG); + se_update_runnable(se); + update_cfs_group(se); + } else { + enqueue_entity(cfs_rq, se, flags); + flags = ENQUEUE_WAKEUP; + } cfs_rq->h_nr_running++; cfs_rq->idle_h_nr_running += idle_h_nr_running; -- 2.40.0
| |