diff options
author | Jon Medhurst <tixy@linaro.org> | 2016-11-11 14:14:22 +0000 |
---|---|---|
committer | Jon Medhurst <tixy@linaro.org> | 2016-11-11 14:14:22 +0000 |
commit | f8e754c92c0285248d5569678031eb4066cc7757 (patch) | |
tree | 5cbedb831649eab96f1b8df1fb14f2421de29762 | |
parent | 14309338afc9064e184ff8d29c6c55ccd29b57cd (diff) | |
parent | 6713ef82ba27ddc4eb98133ab4ba1a2ce76426c2 (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.c | 6 |
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); |