From c05cd3079d0dd31ee5391a2a5c036fdecc67a136 Mon Sep 17 00:00:00 2001 From: Morten Rasmussen Date: Tue, 6 Aug 2013 16:14:19 +0100 Subject: [PATCH] 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 Signed-off-by: Liviu Dudau Signed-off-by: Jon Medhurst --- kernel/sched/fair.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 81579411348d..b801eb0330e1 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -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) && -- 2.34.1