diff options
author | Jon Medhurst <tixy@linaro.org> | 2016-11-11 14:42:18 +0000 |
---|---|---|
committer | Jon Medhurst <tixy@linaro.org> | 2016-11-11 14:42:18 +0000 |
commit | 3d622d093081c47fca7a211cfb17acd9abc12d6c (patch) | |
tree | db8d79a4b3ca97efb98fa120bd2c8d5ba5b5ff3c | |
parent | 3bcaf9476031f63f9e1fc1caf7a840688bf7df82 (diff) | |
parent | 802dcb7b6bcaf663456e7402f73b767ed8a298c2 (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.c | 6 |
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); |