aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <tixy@linaro.org>2016-11-11 14:14:22 +0000
committerJon Medhurst <tixy@linaro.org>2016-11-11 14:14:22 +0000
commitf8e754c92c0285248d5569678031eb4066cc7757 (patch)
tree5cbedb831649eab96f1b8df1fb14f2421de29762
parent14309338afc9064e184ff8d29c6c55ccd29b57cd (diff)
parent6713ef82ba27ddc4eb98133ab4ba1a2ce76426c2 (diff)
Merge HMP fix "sched/HMP: Close race-condition window by holding task ref longer"HEADlsk-3.10-armlt-juno-20161111lsk-3.10-armlt-juno
-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 1baf6413a882..6abf3fbb700f 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -7302,7 +7302,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;
}
@@ -7315,7 +7318,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);
@@ -7332,6 +7334,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);