Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f99e3fe6 authored by Juri Lelli's avatar Juri Lelli Committed by Leo Yan
Browse files

sched/fair: cpufreq_sched triggers for load balancing



As we don't trigger freq changes from {en,de}queue_task_fair() during load
balancing, we need to do explicitly so on load balancing paths.

[smuckle@linaro.org: move update_capacity_of calls so rq lock is held]

cc: Ingo Molnar <mingo@redhat.com>
cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarJuri Lelli <juri.lelli@arm.com>
Signed-off-by: default avatarSteve Muckle <smuckle@linaro.org>
parent 7ff814dd
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -6384,6 +6384,10 @@ static void attach_one_task(struct rq *rq, struct task_struct *p)
{
	raw_spin_lock(&rq->lock);
	attach_task(rq, p);
	/*
	 * We want to potentially raise target_cpu's OPP.
	 */
	update_capacity_of(cpu_of(rq));
	raw_spin_unlock(&rq->lock);
}

@@ -6405,6 +6409,11 @@ static void attach_tasks(struct lb_env *env)
		attach_task(env->dst_rq, p);
	}

	/*
	 * We want to potentially raise env.dst_cpu's OPP.
	 */
	update_capacity_of(env->dst_cpu);

	raw_spin_unlock(&env->dst_rq->lock);
}

@@ -7667,6 +7676,11 @@ more_balance:
		 * ld_moved     - cumulative load moved across iterations
		 */
		cur_ld_moved = detach_tasks(&env);
		/*
		 * We want to potentially lower env.src_cpu's OPP.
		 */
		if (cur_ld_moved)
			update_capacity_of(env.src_cpu);

		/*
		 * We've detached some tasks from busiest_rq. Every
@@ -8037,8 +8051,13 @@ static int active_load_balance_cpu_stop(void *data)
		schedstat_inc(sd, alb_count);

		p = detach_one_task(&env);
		if (p)
		if (p) {
			schedstat_inc(sd, alb_pushed);
			/*
			 * We want to potentially lower env.src_cpu's OPP.
			 */
			update_capacity_of(env.src_cpu);
		}
		else
			schedstat_inc(sd, alb_failed);
	}