enqueue_task_fair jumps to enqueue_throttle label when cfs_rq_of(se) is
throttled which means that se can't be NULL and we can skip the test.

Reviewed-by: Phil Auld <[email protected]>
Signed-off-by: Vincent Guittot <[email protected]>
---

v2 changes:
- Remove useless if statement

 kernel/sched/fair.c | 39 ++++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index a0c690d57430..b51b12d63c39 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5513,28 +5513,29 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, 
int flags)
                        list_add_leaf_cfs_rq(cfs_rq);
        }
 
-enqueue_throttle:
-       if (!se) {
-               add_nr_running(rq, 1);
-               /*
-                * Since new tasks are assigned an initial util_avg equal to
-                * half of the spare capacity of their CPU, tiny tasks have the
-                * ability to cross the overutilized threshold, which will
-                * result in the load balancer ruining all the task placement
-                * done by EAS. As a way to mitigate that effect, do not account
-                * for the first enqueue operation of new tasks during the
-                * overutilized flag detection.
-                *
-                * A better way of solving this problem would be to wait for
-                * the PELT signals of tasks to converge before taking them
-                * into account, but that is not straightforward to implement,
-                * and the following generally works well enough in practice.
-                */
-               if (flags & ENQUEUE_WAKEUP)
-                       update_overutilized_status(rq);
+       /* At this point se is NULL and we are at root level*/
+       add_nr_running(rq, 1);
+
+       /*
+        * Since new tasks are assigned an initial util_avg equal to
+        * half of the spare capacity of their CPU, tiny tasks have the
+        * ability to cross the overutilized threshold, which will
+        * result in the load balancer ruining all the task placement
+        * done by EAS. As a way to mitigate that effect, do not account
+        * for the first enqueue operation of new tasks during the
+        * overutilized flag detection.
+        *
+        * A better way of solving this problem would be to wait for
+        * the PELT signals of tasks to converge before taking them
+        * into account, but that is not straightforward to implement,
+        * and the following generally works well enough in practice.
+        */
+       if (flags & ENQUEUE_WAKEUP)
+               update_overutilized_status(rq);
 
        }
 
+enqueue_throttle:
        if (cfs_bandwidth_used()) {
                /*
                 * When bandwidth control is enabled; the cfs_rq_throttled()
-- 
2.17.1

Reply via email to