sched: HMP fix traversing the rb-tree from the curr pointer

The hmp_get_{lightest,heaviest}_task() need to use
__pick_first_entity() to get a pointer to a sched_entity on the rq.
The current is not kept on the rq while running, so its rb-tree node
pointers are no longer valid.

Signed-off-by: Chris Redpath <chris.redpath@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
This commit is contained in:
Morten Rasmussen
2013-08-06 16:14:19 +01:00
committed by Jon Medhurst
parent 83a3cdb6d3
commit c05cd3079d

View File

@@ -3602,6 +3602,8 @@ static struct sched_entity *hmp_get_heaviest_task(
hmp = hmp_faster_domain(cpu_of(se->cfs_rq->rq));
hmp_target_mask = &hmp->cpus;
}
/* The currently running task is not on the runqueue */
se = __pick_first_entity(cfs_rq_of(se));
while (num_tasks && se) {
if (entity_is_task(se) &&
@@ -3630,10 +3632,11 @@ static struct sched_entity *hmp_get_lightest_task(
struct hmp_domain *hmp;
if (hmp_cpu_is_slowest(cpu_of(se->cfs_rq->rq)))
return min_se;
hmp = hmp_slower_domain(cpu_of(se->cfs_rq->rq));
hmp_target_mask = &hmp->cpus;
}
/* The currently running task is not on the runqueue */
se = __pick_first_entity(cfs_rq_of(se));
while (num_tasks && se) {
if (entity_is_task(se) &&