aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <tixy@linaro.org>2016-11-11 14:42:18 +0000
committerJon Medhurst <tixy@linaro.org>2016-11-11 14:42:18 +0000
commit3d622d093081c47fca7a211cfb17acd9abc12d6c (patch)
treedb8d79a4b3ca97efb98fa120bd2c8d5ba5b5ff3c
parent3bcaf9476031f63f9e1fc1caf7a840688bf7df82 (diff)
parent802dcb7b6bcaf663456e7402f73b767ed8a298c2 (diff)
Merge HMP fix "sched/HMP: Close race-condition window by holding task ref longer"lsk-3.18-armlt-20161111-hmp-testlsk-3.18-armlt-hmp-test
-rw-r--r--kernel/sched/fair.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 87f7b29bb2e0..05eda8065e4b 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9169,7 +9169,10 @@ static unsigned int hmp_idle_pull(int this_cpu)
curr->avg.load_avg_ratio > ratio &&
cpumask_test_cpu(this_cpu,
tsk_cpus_allowed(task_of(curr)))) {
+ if(p)
+ put_task_struct(p);
p = task_of(curr);
+ get_task_struct(p);
target = rq;
ratio = curr->avg.load_avg_ratio;
}
@@ -9182,7 +9185,6 @@ static unsigned int hmp_idle_pull(int this_cpu)
/* now we have a candidate */
raw_spin_lock_irqsave(&target->lock, flags);
if (!target->active_balance && task_rq(p) == target) {
- get_task_struct(p);
target->push_cpu = this_cpu;
target->migrate_task = p;
trace_sched_hmp_migrate(p, target->push_cpu, HMP_MIGRATE_IDLE_PULL);
@@ -9199,6 +9201,8 @@ static unsigned int hmp_idle_pull(int this_cpu)
target->active_balance = 1;
force = 1;
}
+ } else {
+ put_task_struct(p);
}
raw_spin_unlock_irqrestore(&target->lock, flags);