On 11/03/2021 13:05, Valentin Schneider wrote:

[...]

> @@ -9952,7 +9954,8 @@ static int active_load_balance_cpu_stop(void *data)
>                        * @dst_grpmask we need to make that test go away with 
> lying
>                        * about DST_PINNED.
>                        */
> -                     .flags          = LBF_DST_PINNED,
> +                     .flags          = LBF_DST_PINNED |
> +                                       LBF_ACTIVE_LB,

Since you now have a dedicated LBF flag for active balancing you could remove 
the
LBF_DST_PINNED here and adapt the if condition in can_migrate_task():

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index f50a902bdf24..9f7feb512016 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -7583,10 +7583,13 @@ int can_migrate_task(struct task_struct *p, struct 
lb_env *env)
                 * meet load balance goals by pulling other tasks on src_cpu.
                 *
                 * Avoid computing new_dst_cpu for NEWLY_IDLE or if we have
-                * already computed one in current iteration.
+                * already computed one in current iteration or if it is an
+                * active balance.
                 */
-               if (env->idle == CPU_NEWLY_IDLE || (env->flags & 
LBF_DST_PINNED))
+               if (env->idle == CPU_NEWLY_IDLE ||
+                   (env->flags & (LBF_DST_PINNED | LBF_ACTIVE_LB))) {
                        return 0;
+               }
 
                /* Prevent to re-select dst_cpu via env's CPUs: */
                for_each_cpu_and(cpu, env->dst_grpmask, env->cpus) {
@@ -9948,14 +9951,7 @@ static int active_load_balance_cpu_stop(void *data)
                        .src_cpu        = busiest_rq->cpu,
                        .src_rq         = busiest_rq,
                        .idle           = CPU_IDLE,
-                       /*
-                        * can_migrate_task() doesn't need to compute 
new_dst_cpu
-                        * for active balancing. Since we have CPU_IDLE, but no
-                        * @dst_grpmask we need to make that test go away with 
lying
-                        * about DST_PINNED.
-                        */
-                       .flags          = LBF_DST_PINNED |
-                                         LBF_ACTIVE_LB,
+                       .flags          = LBF_ACTIVE_LB,
                };

Reply via email to