diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index ee7bc7b7a780..e5edf21534f0 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8197,6 +8197,27 @@ int can_migrate_task(struct task_struct *p, struct lb_env *env) return 0; } +#ifdef CONFIG_SCHED_WALT + if ((env->idle == CPU_NEWLY_IDLE) && + is_min_capacity_cpu(env->dst_cpu) && + !is_min_capacity_cpu(env->src_cpu) && + walt_get_rtg_status(p)) { + bool pull_to_silver_allowed = false; + unsigned int cpu; + + for_each_cpu(cpu, env->cpus) { + if (!is_min_capacity_cpu(cpu) && + cpu_overutilized(cpu)) { + pull_to_silver_allowed = true; + break; + } + } + + if (!pull_to_silver_allowed) + return 0; + } +#endif + /* * Aggressive migration if: * 1) IDLE or NEWLY_IDLE balance.