Merge "sched: avoid RT tasks contention during sched boost"

This commit is contained in:
Linux Build Service Account 2017-08-03 20:51:01 -07:00 committed by Gerrit - the friendly Code Review server
commit 1625604b6e

View file

@ -1823,6 +1823,7 @@ static int find_lowest_rq_hmp(struct task_struct *task)
* the best one based on our affinity and topology.
*/
retry:
for_each_sched_cluster(cluster) {
if (boost_on_big && cluster->capacity != max_possible_capacity)
continue;
@ -1830,6 +1831,15 @@ static int find_lowest_rq_hmp(struct task_struct *task)
cpumask_and(&candidate_mask, &cluster->cpus, lowest_mask);
cpumask_andnot(&candidate_mask, &candidate_mask,
cpu_isolated_mask);
/*
* When placement boost is active, if there is no eligible CPU
* in the highest capacity cluster, we fallback to the other
* clusters. So clear the CPUs of the traversed cluster from
* the lowest_mask.
*/
if (unlikely(boost_on_big))
cpumask_andnot(lowest_mask, lowest_mask,
&cluster->cpus);
if (cpumask_empty(&candidate_mask))
continue;
@ -1869,6 +1879,11 @@ static int find_lowest_rq_hmp(struct task_struct *task)
break;
}
if (unlikely(boost_on_big && best_cpu == -1)) {
boost_on_big = 0;
goto retry;
}
return best_cpu;
}
#endif /* CONFIG_SCHED_HMP */