All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list
@ 2022-05-26  7:13 Chengming Zhou
  2022-05-26  7:13 ` [PATCH v2 1/2] sched/fair: fix propagate during synchronous attach/detach Chengming Zhou
  2022-05-26  7:13 ` [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
  0 siblings, 2 replies; 7+ messages in thread
From: Chengming Zhou @ 2022-05-26  7:13 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid, odin
  Cc: linux-kernel, duanxiongchun, songmuchun, Chengming Zhou

Hi,

This v2 is based on [1], which try to not put cfs_rqs in throttled_hierarchy
on the rq leaf_cfs_rq_list, simplify the leaf_cfs_rq_list maintenance and
optimize the periodic load decay.

Vincent suggested moving throttled_hierarchy() outside list_add_leaf_cfs_rq()
because the task will not be added in this case which is quite misleading.

When do that moving in propagate_entity_cfs_rq(), I found it has problem
with propagation upwards. So add the fix in the first patch to be easier
to backport, please see the details in its commit message.

[1] https://lore.kernel.org/all/20220427160544.40309-1-zhouchengming@bytedance.com/

Chengming Zhou (2):
  sched/fair: fix propagate during synchronous attach/detach
  sched/fair: optimize and simplify rq leaf_cfs_rq_list

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

-- 
2.36.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 1/2] sched/fair: fix propagate during synchronous attach/detach
  2022-05-26  7:13 [PATCH v2 0/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
@ 2022-05-26  7:13 ` Chengming Zhou
  2022-05-26  7:13 ` [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
  1 sibling, 0 replies; 7+ messages in thread
From: Chengming Zhou @ 2022-05-26  7:13 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid, odin
  Cc: linux-kernel, duanxiongchun, songmuchun, Chengming Zhou

When a task moves from/to a cfs_rq, we first detach/attach the load_avg
of se from/to that cfs_rq, then propagate the changes across the tg tree
to make it visible to the root, which did in update_load_avg().

But the current code will break when encountering a on_list cfs_rq,
can't propagate up to the root cfs_rq, that also mismatch with the
comment of propagate_entity_cfs_rq(), which says "Propagate the changes
of the sched_entity across the tg tree to make it visible to the root".

The second problem is that it won't update_load_avg() for throttled
cfs_rq, cause the load changes can't be propagated upwards.

    A
    |
    B  --> throttled cfs_rq
   /
  C

The prop_runnable_sum of C won't be propagated to B, so won't be
propagated to A.

Fixes: 0258bdfaff5b ("sched/fair: Fix unfairness caused by missing load decay")
Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
---
 kernel/sched/fair.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 523e548c8fdd..5276d05692e0 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -11303,14 +11303,8 @@ static void propagate_entity_cfs_rq(struct sched_entity *se)
 	for_each_sched_entity(se) {
 		cfs_rq = cfs_rq_of(se);
 
-		if (!cfs_rq_throttled(cfs_rq)){
-			update_load_avg(cfs_rq, se, UPDATE_TG);
-			list_add_leaf_cfs_rq(cfs_rq);
-			continue;
-		}
-
-		if (list_add_leaf_cfs_rq(cfs_rq))
-			break;
+		update_load_avg(cfs_rq, se, UPDATE_TG);
+		list_add_leaf_cfs_rq(cfs_rq);
 	}
 }
 #else
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list
  2022-05-26  7:13 [PATCH v2 0/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
  2022-05-26  7:13 ` [PATCH v2 1/2] sched/fair: fix propagate during synchronous attach/detach Chengming Zhou
@ 2022-05-26  7:13 ` Chengming Zhou
  2022-05-26  8:53   ` kernel test robot
  2022-05-26 10:46   ` kernel test robot
  1 sibling, 2 replies; 7+ messages in thread
From: Chengming Zhou @ 2022-05-26  7:13 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid, odin
  Cc: linux-kernel, duanxiongchun, songmuchun, Chengming Zhou

We notice the rq leaf_cfs_rq_list has two problems when do bugfix
backports and some test profiling.

1. cfs_rqs under throttled subtree could be added to the list, and
   make their fully decayed ancestors on the list, even though not needed.

2. #1 also make the leaf_cfs_rq_list management complex and error prone,
   this is the list of related bugfix so far:

   commit 31bc6aeaab1d ("sched/fair: Optimize update_blocked_averages()")
   commit fe61468b2cbc ("sched/fair: Fix enqueue_task_fair warning")
   commit b34cb07dde7c ("sched/fair: Fix enqueue_task_fair() warning some more")
   commit 39f23ce07b93 ("sched/fair: Fix unthrottle_cfs_rq() for leaf_cfs_rq list")
   commit 0258bdfaff5b ("sched/fair: Fix unfairness caused by missing load decay")
   commit a7b359fc6a37 ("sched/fair: Correctly insert cfs_rq's to list on unthrottle")
   commit fdaba61ef8a2 ("sched/fair: Ensure that the CFS parent is added after unthrottling")
   commit 2630cde26711 ("sched/fair: Add ancestors of unthrottled undecayed cfs_rq")

commit 31bc6aeaab1d ("sched/fair: Optimize update_blocked_averages()")
delete every cfs_rq under throttled subtree from rq->leaf_cfs_rq_list,
and delete the throttled_hierarchy() test in update_blocked_averages(),
which optimized update_blocked_averages().

But those later bugfix add cfs_rqs under throttled subtree back to
rq->leaf_cfs_rq_list again, with their fully decayed ancestors, for
the integrity of rq->leaf_cfs_rq_list.

This patch takes another method, skip all cfs_rqs under throttled
hierarchy when list_add_leaf_cfs_rq(), to completely make cfs_rqs
under throttled subtree off the leaf_cfs_rq_list.

So we don't need to consider throttled related things in
enqueue_entity(), unthrottle_cfs_rq() and enqueue_task_fair(),
which simplify the code a lot. Also optimize update_blocked_averages()
since cfs_rqs under throttled hierarchy and their ancestors
won't be on the leaf_cfs_rq_list.

Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
---
v2:
 - move throttled_hierarchy() outside list_add_leaf_cfs_rq(),
   suggested by Vincent.
---
 kernel/sched/fair.c | 77 ++++++++++++---------------------------------
 1 file changed, 20 insertions(+), 57 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 5276d05692e0..7438c1865109 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4374,16 +4374,11 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
 		__enqueue_entity(cfs_rq, se);
 	se->on_rq = 1;
 
-	/*
-	 * When bandwidth control is enabled, cfs might have been removed
-	 * because of a parent been throttled but cfs->nr_running > 1. Try to
-	 * add it unconditionally.
-	 */
-	if (cfs_rq->nr_running == 1 || cfs_bandwidth_used())
-		list_add_leaf_cfs_rq(cfs_rq);
-
-	if (cfs_rq->nr_running == 1)
+	if (cfs_rq->nr_running == 1) {
 		check_enqueue_throttle(cfs_rq);
+		if (!throttled_hierarchy(cfs_rq))
+			list_add_leaf_cfs_rq(cfs_rq);
+	}
 }
 
 static void __clear_buddies_last(struct sched_entity *se)
@@ -4998,11 +4993,18 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 	/* update hierarchical throttle state */
 	walk_tg_tree_from(cfs_rq->tg, tg_nop, tg_unthrottle_up, (void *)rq);
 
-	/* Nothing to run but something to decay (on_list)? Complete the branch */
 	if (!cfs_rq->load.weight) {
-		if (cfs_rq->on_list)
-			goto unthrottle_throttle;
-		return;
+		if (!cfs_rq->on_list)
+			return;
+		/*
+		 * Nothing to run but something to decay (on_list)?
+		 * Complete the branch.
+		 */
+		for_each_sched_entity(se) {
+			if (list_add_leaf_cfs_rq(cfs_rq_of(se)))
+				break;
+		}
+		goto unthrottle_throttle;
 	}
 
 	task_delta = cfs_rq->h_nr_running;
@@ -5040,31 +5042,12 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 		/* end evaluation on encountering a throttled cfs_rq */
 		if (cfs_rq_throttled(qcfs_rq))
 			goto unthrottle_throttle;
-
-		/*
-		 * One parent has been throttled and cfs_rq removed from the
-		 * list. Add it back to not break the leaf list.
-		 */
-		if (throttled_hierarchy(qcfs_rq))
-			list_add_leaf_cfs_rq(qcfs_rq);
 	}
 
 	/* At this point se is NULL and we are at root level*/
 	add_nr_running(rq, task_delta);
 
 unthrottle_throttle:
-	/*
-	 * The cfs_rq_throttled() breaks in the above iteration can result in
-	 * incomplete leaf list maintenance, resulting in triggering the
-	 * assertion below.
-	 */
-	for_each_sched_entity(se) {
-		struct cfs_rq *qcfs_rq = cfs_rq_of(se);
-
-		if (list_add_leaf_cfs_rq(qcfs_rq))
-			break;
-	}
-
 	assert_list_leaf_cfs_rq(rq);
 
 	/* Determine whether we need to wake up potentially idle CPU: */
@@ -5719,13 +5702,6 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
 		/* end evaluation on encountering a throttled cfs_rq */
 		if (cfs_rq_throttled(cfs_rq))
 			goto enqueue_throttle;
-
-               /*
-                * One parent has been throttled and cfs_rq removed from the
-                * list. Add it back to not break the leaf list.
-                */
-               if (throttled_hierarchy(cfs_rq))
-                       list_add_leaf_cfs_rq(cfs_rq);
 	}
 
 	/* At this point se is NULL and we are at root level*/
@@ -5749,21 +5725,6 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
 		update_overutilized_status(rq);
 
 enqueue_throttle:
-	if (cfs_bandwidth_used()) {
-		/*
-		 * When bandwidth control is enabled; the cfs_rq_throttled()
-		 * breaks in the above iteration can result in incomplete
-		 * leaf list maintenance, resulting in triggering the assertion
-		 * below.
-		 */
-		for_each_sched_entity(se) {
-			cfs_rq = cfs_rq_of(se);
-
-			if (list_add_leaf_cfs_rq(cfs_rq))
-				break;
-		}
-	}
-
 	assert_list_leaf_cfs_rq(rq);
 
 	hrtick_update(rq);
@@ -11293,9 +11254,10 @@ static inline bool vruntime_normalized(struct task_struct *p)
  */
 static void propagate_entity_cfs_rq(struct sched_entity *se)
 {
-	struct cfs_rq *cfs_rq;
+	struct cfs_rq *cfs_rq = cfs_rq_of(se);
 
-	list_add_leaf_cfs_rq(cfs_rq_of(se));
+	if (!throttled_hierarchy(cfs_rq))
+		list_add_leaf_cfs_rq(cfs_rq);
 
 	/* Start to propagate at parent */
 	se = se->parent;
@@ -11304,7 +11266,8 @@ static void propagate_entity_cfs_rq(struct sched_entity *se)
 		cfs_rq = cfs_rq_of(se);
 
 		update_load_avg(cfs_rq, se, UPDATE_TG);
-		list_add_leaf_cfs_rq(cfs_rq);
+		if (!throttled_hierarchy(cfs_rq))
+			list_add_leaf_cfs_rq(cfs_rq);
 	}
 }
 #else
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list
  2022-05-26  7:13 ` [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
@ 2022-05-26  8:53   ` kernel test robot
  2022-05-26 10:25       ` Chengming Zhou
  2022-05-26 10:46   ` kernel test robot
  1 sibling, 1 reply; 7+ messages in thread
From: kernel test robot @ 2022-05-26  8:53 UTC (permalink / raw)
  To: Chengming Zhou, mingo, peterz, juri.lelli, vincent.guittot,
	dietmar.eggemann, rostedt, bsegall, mgorman, bristot, vschneid,
	odin
  Cc: kbuild-all, linux-kernel, duanxiongchun, songmuchun, Chengming Zhou

Hi Chengming,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on tip/sched/core]
[also build test ERROR on tip/master linus/master v5.18 next-20220525]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 991d8d8142cad94f9c5c05db25e67fa83d6f772a
config: powerpc-allnoconfig (https://download.01.org/0day-ci/archive/20220526/202205261617.YUT1ixQ8-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/cb2b1810aeb3f8f290a932f3e625ab9df1110054
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
        git checkout cb2b1810aeb3f8f290a932f3e625ab9df1110054
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash kernel/sched/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   kernel/sched/fair.c:645:5: warning: no previous prototype for 'sched_update_scaling' [-Wmissing-prototypes]
     645 | int sched_update_scaling(void)
         |     ^~~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c: In function 'enqueue_entity':
>> kernel/sched/fair.c:4343:22: error: implicit declaration of function 'throttled_hierarchy' [-Werror=implicit-function-declaration]
    4343 |                 if (!throttled_hierarchy(cfs_rq))
         |                      ^~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c: At top level:
>> kernel/sched/fair.c:5484:19: error: static declaration of 'throttled_hierarchy' follows non-static declaration
    5484 | static inline int throttled_hierarchy(struct cfs_rq *cfs_rq)
         |                   ^~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:4343:22: note: previous implicit declaration of 'throttled_hierarchy' with type 'int()'
    4343 |                 if (!throttled_hierarchy(cfs_rq))
         |                      ^~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:5495:6: warning: no previous prototype for 'init_cfs_bandwidth' [-Wmissing-prototypes]
    5495 | void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b) {}
         |      ^~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:11654:6: warning: no previous prototype for 'free_fair_sched_group' [-Wmissing-prototypes]
   11654 | void free_fair_sched_group(struct task_group *tg) { }
         |      ^~~~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:11656:5: warning: no previous prototype for 'alloc_fair_sched_group' [-Wmissing-prototypes]
   11656 | int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
         |     ^~~~~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:11661:6: warning: no previous prototype for 'online_fair_sched_group' [-Wmissing-prototypes]
   11661 | void online_fair_sched_group(struct task_group *tg) { }
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   kernel/sched/fair.c:11663:6: warning: no previous prototype for 'unregister_fair_sched_group' [-Wmissing-prototypes]
   11663 | void unregister_fair_sched_group(struct task_group *tg) { }
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/throttled_hierarchy +4343 kernel/sched/fair.c

  4263	
  4264	/*
  4265	 * MIGRATION
  4266	 *
  4267	 *	dequeue
  4268	 *	  update_curr()
  4269	 *	    update_min_vruntime()
  4270	 *	  vruntime -= min_vruntime
  4271	 *
  4272	 *	enqueue
  4273	 *	  update_curr()
  4274	 *	    update_min_vruntime()
  4275	 *	  vruntime += min_vruntime
  4276	 *
  4277	 * this way the vruntime transition between RQs is done when both
  4278	 * min_vruntime are up-to-date.
  4279	 *
  4280	 * WAKEUP (remote)
  4281	 *
  4282	 *	->migrate_task_rq_fair() (p->state == TASK_WAKING)
  4283	 *	  vruntime -= min_vruntime
  4284	 *
  4285	 *	enqueue
  4286	 *	  update_curr()
  4287	 *	    update_min_vruntime()
  4288	 *	  vruntime += min_vruntime
  4289	 *
  4290	 * this way we don't have the most up-to-date min_vruntime on the originating
  4291	 * CPU and an up-to-date min_vruntime on the destination CPU.
  4292	 */
  4293	
  4294	static void
  4295	enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
  4296	{
  4297		bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_MIGRATED);
  4298		bool curr = cfs_rq->curr == se;
  4299	
  4300		/*
  4301		 * If we're the current task, we must renormalise before calling
  4302		 * update_curr().
  4303		 */
  4304		if (renorm && curr)
  4305			se->vruntime += cfs_rq->min_vruntime;
  4306	
  4307		update_curr(cfs_rq);
  4308	
  4309		/*
  4310		 * Otherwise, renormalise after, such that we're placed at the current
  4311		 * moment in time, instead of some random moment in the past. Being
  4312		 * placed in the past could significantly boost this task to the
  4313		 * fairness detriment of existing tasks.
  4314		 */
  4315		if (renorm && !curr)
  4316			se->vruntime += cfs_rq->min_vruntime;
  4317	
  4318		/*
  4319		 * When enqueuing a sched_entity, we must:
  4320		 *   - Update loads to have both entity and cfs_rq synced with now.
  4321		 *   - Add its load to cfs_rq->runnable_avg
  4322		 *   - For group_entity, update its weight to reflect the new share of
  4323		 *     its group cfs_rq
  4324		 *   - Add its new weight to cfs_rq->load.weight
  4325		 */
  4326		update_load_avg(cfs_rq, se, UPDATE_TG | DO_ATTACH);
  4327		se_update_runnable(se);
  4328		update_cfs_group(se);
  4329		account_entity_enqueue(cfs_rq, se);
  4330	
  4331		if (flags & ENQUEUE_WAKEUP)
  4332			place_entity(cfs_rq, se, 0);
  4333	
  4334		check_schedstat_required();
  4335		update_stats_enqueue_fair(cfs_rq, se, flags);
  4336		check_spread(cfs_rq, se);
  4337		if (!curr)
  4338			__enqueue_entity(cfs_rq, se);
  4339		se->on_rq = 1;
  4340	
  4341		if (cfs_rq->nr_running == 1) {
  4342			check_enqueue_throttle(cfs_rq);
> 4343			if (!throttled_hierarchy(cfs_rq))
  4344				list_add_leaf_cfs_rq(cfs_rq);
  4345		}
  4346	}
  4347	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [External] Re: [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list
  2022-05-26  8:53   ` kernel test robot
@ 2022-05-26 10:25       ` Chengming Zhou
  0 siblings, 0 replies; 7+ messages in thread
From: Chengming Zhou @ 2022-05-26 10:25 UTC (permalink / raw)
  To: kernel test robot, mingo, peterz, juri.lelli, vincent.guittot,
	dietmar.eggemann, rostedt, bsegall, mgorman, bristot, vschneid,
	odin
  Cc: kbuild-all, linux-kernel, duanxiongchun, songmuchun

On 2022/5/26 16:53, kernel test robot wrote:
> Hi Chengming,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on tip/sched/core]
> [also build test ERROR on tip/master linus/master v5.18 next-20220525]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 991d8d8142cad94f9c5c05db25e67fa83d6f772a
> config: powerpc-allnoconfig (https://download.01.org/0day-ci/archive/20220526/202205261617.YUT1ixQ8-lkp@intel.com/config)
> compiler: powerpc-linux-gcc (GCC) 11.3.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/intel-lab-lkp/linux/commit/cb2b1810aeb3f8f290a932f3e625ab9df1110054
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
>         git checkout cb2b1810aeb3f8f290a932f3e625ab9df1110054
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash kernel/sched/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>

Thanks, will fix !CONFIG_FAIR_GROUP_SCHED build next version.

> 
> All errors (new ones prefixed by >>):
> 
>    kernel/sched/fair.c:645:5: warning: no previous prototype for 'sched_update_scaling' [-Wmissing-prototypes]
>      645 | int sched_update_scaling(void)
>          |     ^~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c: In function 'enqueue_entity':
>>> kernel/sched/fair.c:4343:22: error: implicit declaration of function 'throttled_hierarchy' [-Werror=implicit-function-declaration]
>     4343 |                 if (!throttled_hierarchy(cfs_rq))
>          |                      ^~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c: At top level:
>>> kernel/sched/fair.c:5484:19: error: static declaration of 'throttled_hierarchy' follows non-static declaration
>     5484 | static inline int throttled_hierarchy(struct cfs_rq *cfs_rq)
>          |                   ^~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:4343:22: note: previous implicit declaration of 'throttled_hierarchy' with type 'int()'
>     4343 |                 if (!throttled_hierarchy(cfs_rq))
>          |                      ^~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:5495:6: warning: no previous prototype for 'init_cfs_bandwidth' [-Wmissing-prototypes]
>     5495 | void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b) {}
>          |      ^~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11654:6: warning: no previous prototype for 'free_fair_sched_group' [-Wmissing-prototypes]
>    11654 | void free_fair_sched_group(struct task_group *tg) { }
>          |      ^~~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11656:5: warning: no previous prototype for 'alloc_fair_sched_group' [-Wmissing-prototypes]
>    11656 | int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
>          |     ^~~~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11661:6: warning: no previous prototype for 'online_fair_sched_group' [-Wmissing-prototypes]
>    11661 | void online_fair_sched_group(struct task_group *tg) { }
>          |      ^~~~~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11663:6: warning: no previous prototype for 'unregister_fair_sched_group' [-Wmissing-prototypes]
>    11663 | void unregister_fair_sched_group(struct task_group *tg) { }
>          |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>    cc1: some warnings being treated as errors
> 
> 
> vim +/throttled_hierarchy +4343 kernel/sched/fair.c
> 
>   4263	
>   4264	/*
>   4265	 * MIGRATION
>   4266	 *
>   4267	 *	dequeue
>   4268	 *	  update_curr()
>   4269	 *	    update_min_vruntime()
>   4270	 *	  vruntime -= min_vruntime
>   4271	 *
>   4272	 *	enqueue
>   4273	 *	  update_curr()
>   4274	 *	    update_min_vruntime()
>   4275	 *	  vruntime += min_vruntime
>   4276	 *
>   4277	 * this way the vruntime transition between RQs is done when both
>   4278	 * min_vruntime are up-to-date.
>   4279	 *
>   4280	 * WAKEUP (remote)
>   4281	 *
>   4282	 *	->migrate_task_rq_fair() (p->state == TASK_WAKING)
>   4283	 *	  vruntime -= min_vruntime
>   4284	 *
>   4285	 *	enqueue
>   4286	 *	  update_curr()
>   4287	 *	    update_min_vruntime()
>   4288	 *	  vruntime += min_vruntime
>   4289	 *
>   4290	 * this way we don't have the most up-to-date min_vruntime on the originating
>   4291	 * CPU and an up-to-date min_vruntime on the destination CPU.
>   4292	 */
>   4293	
>   4294	static void
>   4295	enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
>   4296	{
>   4297		bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_MIGRATED);
>   4298		bool curr = cfs_rq->curr == se;
>   4299	
>   4300		/*
>   4301		 * If we're the current task, we must renormalise before calling
>   4302		 * update_curr().
>   4303		 */
>   4304		if (renorm && curr)
>   4305			se->vruntime += cfs_rq->min_vruntime;
>   4306	
>   4307		update_curr(cfs_rq);
>   4308	
>   4309		/*
>   4310		 * Otherwise, renormalise after, such that we're placed at the current
>   4311		 * moment in time, instead of some random moment in the past. Being
>   4312		 * placed in the past could significantly boost this task to the
>   4313		 * fairness detriment of existing tasks.
>   4314		 */
>   4315		if (renorm && !curr)
>   4316			se->vruntime += cfs_rq->min_vruntime;
>   4317	
>   4318		/*
>   4319		 * When enqueuing a sched_entity, we must:
>   4320		 *   - Update loads to have both entity and cfs_rq synced with now.
>   4321		 *   - Add its load to cfs_rq->runnable_avg
>   4322		 *   - For group_entity, update its weight to reflect the new share of
>   4323		 *     its group cfs_rq
>   4324		 *   - Add its new weight to cfs_rq->load.weight
>   4325		 */
>   4326		update_load_avg(cfs_rq, se, UPDATE_TG | DO_ATTACH);
>   4327		se_update_runnable(se);
>   4328		update_cfs_group(se);
>   4329		account_entity_enqueue(cfs_rq, se);
>   4330	
>   4331		if (flags & ENQUEUE_WAKEUP)
>   4332			place_entity(cfs_rq, se, 0);
>   4333	
>   4334		check_schedstat_required();
>   4335		update_stats_enqueue_fair(cfs_rq, se, flags);
>   4336		check_spread(cfs_rq, se);
>   4337		if (!curr)
>   4338			__enqueue_entity(cfs_rq, se);
>   4339		se->on_rq = 1;
>   4340	
>   4341		if (cfs_rq->nr_running == 1) {
>   4342			check_enqueue_throttle(cfs_rq);
>> 4343			if (!throttled_hierarchy(cfs_rq))
>   4344				list_add_leaf_cfs_rq(cfs_rq);
>   4345		}
>   4346	}
>   4347	
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [External] Re: [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list
@ 2022-05-26 10:25       ` Chengming Zhou
  0 siblings, 0 replies; 7+ messages in thread
From: Chengming Zhou @ 2022-05-26 10:25 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 7215 bytes --]

On 2022/5/26 16:53, kernel test robot wrote:
> Hi Chengming,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on tip/sched/core]
> [also build test ERROR on tip/master linus/master v5.18 next-20220525]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 991d8d8142cad94f9c5c05db25e67fa83d6f772a
> config: powerpc-allnoconfig (https://download.01.org/0day-ci/archive/20220526/202205261617.YUT1ixQ8-lkp(a)intel.com/config)
> compiler: powerpc-linux-gcc (GCC) 11.3.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/intel-lab-lkp/linux/commit/cb2b1810aeb3f8f290a932f3e625ab9df1110054
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
>         git checkout cb2b1810aeb3f8f290a932f3e625ab9df1110054
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash kernel/sched/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>

Thanks, will fix !CONFIG_FAIR_GROUP_SCHED build next version.

> 
> All errors (new ones prefixed by >>):
> 
>    kernel/sched/fair.c:645:5: warning: no previous prototype for 'sched_update_scaling' [-Wmissing-prototypes]
>      645 | int sched_update_scaling(void)
>          |     ^~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c: In function 'enqueue_entity':
>>> kernel/sched/fair.c:4343:22: error: implicit declaration of function 'throttled_hierarchy' [-Werror=implicit-function-declaration]
>     4343 |                 if (!throttled_hierarchy(cfs_rq))
>          |                      ^~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c: At top level:
>>> kernel/sched/fair.c:5484:19: error: static declaration of 'throttled_hierarchy' follows non-static declaration
>     5484 | static inline int throttled_hierarchy(struct cfs_rq *cfs_rq)
>          |                   ^~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:4343:22: note: previous implicit declaration of 'throttled_hierarchy' with type 'int()'
>     4343 |                 if (!throttled_hierarchy(cfs_rq))
>          |                      ^~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:5495:6: warning: no previous prototype for 'init_cfs_bandwidth' [-Wmissing-prototypes]
>     5495 | void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b) {}
>          |      ^~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11654:6: warning: no previous prototype for 'free_fair_sched_group' [-Wmissing-prototypes]
>    11654 | void free_fair_sched_group(struct task_group *tg) { }
>          |      ^~~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11656:5: warning: no previous prototype for 'alloc_fair_sched_group' [-Wmissing-prototypes]
>    11656 | int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
>          |     ^~~~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11661:6: warning: no previous prototype for 'online_fair_sched_group' [-Wmissing-prototypes]
>    11661 | void online_fair_sched_group(struct task_group *tg) { }
>          |      ^~~~~~~~~~~~~~~~~~~~~~~
>    kernel/sched/fair.c:11663:6: warning: no previous prototype for 'unregister_fair_sched_group' [-Wmissing-prototypes]
>    11663 | void unregister_fair_sched_group(struct task_group *tg) { }
>          |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>    cc1: some warnings being treated as errors
> 
> 
> vim +/throttled_hierarchy +4343 kernel/sched/fair.c
> 
>   4263	
>   4264	/*
>   4265	 * MIGRATION
>   4266	 *
>   4267	 *	dequeue
>   4268	 *	  update_curr()
>   4269	 *	    update_min_vruntime()
>   4270	 *	  vruntime -= min_vruntime
>   4271	 *
>   4272	 *	enqueue
>   4273	 *	  update_curr()
>   4274	 *	    update_min_vruntime()
>   4275	 *	  vruntime += min_vruntime
>   4276	 *
>   4277	 * this way the vruntime transition between RQs is done when both
>   4278	 * min_vruntime are up-to-date.
>   4279	 *
>   4280	 * WAKEUP (remote)
>   4281	 *
>   4282	 *	->migrate_task_rq_fair() (p->state == TASK_WAKING)
>   4283	 *	  vruntime -= min_vruntime
>   4284	 *
>   4285	 *	enqueue
>   4286	 *	  update_curr()
>   4287	 *	    update_min_vruntime()
>   4288	 *	  vruntime += min_vruntime
>   4289	 *
>   4290	 * this way we don't have the most up-to-date min_vruntime on the originating
>   4291	 * CPU and an up-to-date min_vruntime on the destination CPU.
>   4292	 */
>   4293	
>   4294	static void
>   4295	enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
>   4296	{
>   4297		bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_MIGRATED);
>   4298		bool curr = cfs_rq->curr == se;
>   4299	
>   4300		/*
>   4301		 * If we're the current task, we must renormalise before calling
>   4302		 * update_curr().
>   4303		 */
>   4304		if (renorm && curr)
>   4305			se->vruntime += cfs_rq->min_vruntime;
>   4306	
>   4307		update_curr(cfs_rq);
>   4308	
>   4309		/*
>   4310		 * Otherwise, renormalise after, such that we're placed at the current
>   4311		 * moment in time, instead of some random moment in the past. Being
>   4312		 * placed in the past could significantly boost this task to the
>   4313		 * fairness detriment of existing tasks.
>   4314		 */
>   4315		if (renorm && !curr)
>   4316			se->vruntime += cfs_rq->min_vruntime;
>   4317	
>   4318		/*
>   4319		 * When enqueuing a sched_entity, we must:
>   4320		 *   - Update loads to have both entity and cfs_rq synced with now.
>   4321		 *   - Add its load to cfs_rq->runnable_avg
>   4322		 *   - For group_entity, update its weight to reflect the new share of
>   4323		 *     its group cfs_rq
>   4324		 *   - Add its new weight to cfs_rq->load.weight
>   4325		 */
>   4326		update_load_avg(cfs_rq, se, UPDATE_TG | DO_ATTACH);
>   4327		se_update_runnable(se);
>   4328		update_cfs_group(se);
>   4329		account_entity_enqueue(cfs_rq, se);
>   4330	
>   4331		if (flags & ENQUEUE_WAKEUP)
>   4332			place_entity(cfs_rq, se, 0);
>   4333	
>   4334		check_schedstat_required();
>   4335		update_stats_enqueue_fair(cfs_rq, se, flags);
>   4336		check_spread(cfs_rq, se);
>   4337		if (!curr)
>   4338			__enqueue_entity(cfs_rq, se);
>   4339		se->on_rq = 1;
>   4340	
>   4341		if (cfs_rq->nr_running == 1) {
>   4342			check_enqueue_throttle(cfs_rq);
>> 4343			if (!throttled_hierarchy(cfs_rq))
>   4344				list_add_leaf_cfs_rq(cfs_rq);
>   4345		}
>   4346	}
>   4347	
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list
  2022-05-26  7:13 ` [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
  2022-05-26  8:53   ` kernel test robot
@ 2022-05-26 10:46   ` kernel test robot
  1 sibling, 0 replies; 7+ messages in thread
From: kernel test robot @ 2022-05-26 10:46 UTC (permalink / raw)
  To: Chengming Zhou, mingo, peterz, juri.lelli, vincent.guittot,
	dietmar.eggemann, rostedt, bsegall, mgorman, bristot, vschneid,
	odin
  Cc: llvm, kbuild-all, linux-kernel, duanxiongchun, songmuchun,
	Chengming Zhou

Hi Chengming,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on tip/sched/core]
[also build test ERROR on tip/master linus/master v5.18 next-20220526]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 991d8d8142cad94f9c5c05db25e67fa83d6f772a
config: arm-randconfig-r014-20220524 (https://download.01.org/0day-ci/archive/20220526/202205261834.2QOwksAg-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 3d546191ad9d7d2ad2c7928204b9de51deafa675)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/intel-lab-lkp/linux/commit/cb2b1810aeb3f8f290a932f3e625ab9df1110054
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Chengming-Zhou/sched-fair-optimize-and-simplify-rq-leaf_cfs_rq_list/20220526-151850
        git checkout cb2b1810aeb3f8f290a932f3e625ab9df1110054
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   kernel/sched/fair.c:645:5: warning: no previous prototype for function 'sched_update_scaling' [-Wmissing-prototypes]
   int sched_update_scaling(void)
       ^
   kernel/sched/fair.c:645:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   int sched_update_scaling(void)
   ^
   static 
>> kernel/sched/fair.c:4343:8: error: call to undeclared function 'throttled_hierarchy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   if (!throttled_hierarchy(cfs_rq))
                        ^
   kernel/sched/fair.c:5484:19: error: static declaration of 'throttled_hierarchy' follows non-static declaration
   static inline int throttled_hierarchy(struct cfs_rq *cfs_rq)
                     ^
   kernel/sched/fair.c:4343:8: note: previous implicit declaration is here
                   if (!throttled_hierarchy(cfs_rq))
                        ^
   kernel/sched/fair.c:5495:6: warning: no previous prototype for function 'init_cfs_bandwidth' [-Wmissing-prototypes]
   void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b) {}
        ^
   kernel/sched/fair.c:5495:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b) {}
   ^
   static 
   kernel/sched/fair.c:11654:6: warning: no previous prototype for function 'free_fair_sched_group' [-Wmissing-prototypes]
   void free_fair_sched_group(struct task_group *tg) { }
        ^
   kernel/sched/fair.c:11654:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void free_fair_sched_group(struct task_group *tg) { }
   ^
   static 
   kernel/sched/fair.c:11656:5: warning: no previous prototype for function 'alloc_fair_sched_group' [-Wmissing-prototypes]
   int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
       ^
   kernel/sched/fair.c:11656:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
   ^
   static 
   kernel/sched/fair.c:11661:6: warning: no previous prototype for function 'online_fair_sched_group' [-Wmissing-prototypes]
   void online_fair_sched_group(struct task_group *tg) { }
        ^
   kernel/sched/fair.c:11661:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void online_fair_sched_group(struct task_group *tg) { }
   ^
   static 
   kernel/sched/fair.c:11663:6: warning: no previous prototype for function 'unregister_fair_sched_group' [-Wmissing-prototypes]
   void unregister_fair_sched_group(struct task_group *tg) { }
        ^
   kernel/sched/fair.c:11663:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void unregister_fair_sched_group(struct task_group *tg) { }
   ^
   static 
   6 warnings and 2 errors generated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for DRM_GEM_SHMEM_HELPER
   Depends on HAS_IOMEM && DRM && MMU
   Selected by
   - DRM_SSD130X && HAS_IOMEM && DRM


vim +/throttled_hierarchy +4343 kernel/sched/fair.c

  4263	
  4264	/*
  4265	 * MIGRATION
  4266	 *
  4267	 *	dequeue
  4268	 *	  update_curr()
  4269	 *	    update_min_vruntime()
  4270	 *	  vruntime -= min_vruntime
  4271	 *
  4272	 *	enqueue
  4273	 *	  update_curr()
  4274	 *	    update_min_vruntime()
  4275	 *	  vruntime += min_vruntime
  4276	 *
  4277	 * this way the vruntime transition between RQs is done when both
  4278	 * min_vruntime are up-to-date.
  4279	 *
  4280	 * WAKEUP (remote)
  4281	 *
  4282	 *	->migrate_task_rq_fair() (p->state == TASK_WAKING)
  4283	 *	  vruntime -= min_vruntime
  4284	 *
  4285	 *	enqueue
  4286	 *	  update_curr()
  4287	 *	    update_min_vruntime()
  4288	 *	  vruntime += min_vruntime
  4289	 *
  4290	 * this way we don't have the most up-to-date min_vruntime on the originating
  4291	 * CPU and an up-to-date min_vruntime on the destination CPU.
  4292	 */
  4293	
  4294	static void
  4295	enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
  4296	{
  4297		bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_MIGRATED);
  4298		bool curr = cfs_rq->curr == se;
  4299	
  4300		/*
  4301		 * If we're the current task, we must renormalise before calling
  4302		 * update_curr().
  4303		 */
  4304		if (renorm && curr)
  4305			se->vruntime += cfs_rq->min_vruntime;
  4306	
  4307		update_curr(cfs_rq);
  4308	
  4309		/*
  4310		 * Otherwise, renormalise after, such that we're placed at the current
  4311		 * moment in time, instead of some random moment in the past. Being
  4312		 * placed in the past could significantly boost this task to the
  4313		 * fairness detriment of existing tasks.
  4314		 */
  4315		if (renorm && !curr)
  4316			se->vruntime += cfs_rq->min_vruntime;
  4317	
  4318		/*
  4319		 * When enqueuing a sched_entity, we must:
  4320		 *   - Update loads to have both entity and cfs_rq synced with now.
  4321		 *   - Add its load to cfs_rq->runnable_avg
  4322		 *   - For group_entity, update its weight to reflect the new share of
  4323		 *     its group cfs_rq
  4324		 *   - Add its new weight to cfs_rq->load.weight
  4325		 */
  4326		update_load_avg(cfs_rq, se, UPDATE_TG | DO_ATTACH);
  4327		se_update_runnable(se);
  4328		update_cfs_group(se);
  4329		account_entity_enqueue(cfs_rq, se);
  4330	
  4331		if (flags & ENQUEUE_WAKEUP)
  4332			place_entity(cfs_rq, se, 0);
  4333	
  4334		check_schedstat_required();
  4335		update_stats_enqueue_fair(cfs_rq, se, flags);
  4336		check_spread(cfs_rq, se);
  4337		if (!curr)
  4338			__enqueue_entity(cfs_rq, se);
  4339		se->on_rq = 1;
  4340	
  4341		if (cfs_rq->nr_running == 1) {
  4342			check_enqueue_throttle(cfs_rq);
> 4343			if (!throttled_hierarchy(cfs_rq))
  4344				list_add_leaf_cfs_rq(cfs_rq);
  4345		}
  4346	}
  4347	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-05-26 10:48 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-26  7:13 [PATCH v2 0/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
2022-05-26  7:13 ` [PATCH v2 1/2] sched/fair: fix propagate during synchronous attach/detach Chengming Zhou
2022-05-26  7:13 ` [PATCH v2 2/2] sched/fair: optimize and simplify rq leaf_cfs_rq_list Chengming Zhou
2022-05-26  8:53   ` kernel test robot
2022-05-26 10:25     ` [External] " Chengming Zhou
2022-05-26 10:25       ` Chengming Zhou
2022-05-26 10:46   ` kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.