diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2009-09-12 13:04:37 +0200 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-09-12 13:04:37 +0200 |
commit | 87d721ad7a37b7650dd710c88dd5c6a5bf9fe996 (patch) | |
tree | 869d633803eb7c429624d3bd16a6117816849763 /kernel/sched_cpupri.c | |
parent | Merge branch 'devel-stable' into devel (diff) | |
parent | ARM: Fix pfn_valid() for sparse memory (diff) | |
download | linux-87d721ad7a37b7650dd710c88dd5c6a5bf9fe996.tar.xz linux-87d721ad7a37b7650dd710c88dd5c6a5bf9fe996.zip |
Merge branch 'master' into devel
Diffstat (limited to 'kernel/sched_cpupri.c')
-rw-r--r-- | kernel/sched_cpupri.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/kernel/sched_cpupri.c b/kernel/sched_cpupri.c index e6c251790dde..d014efbf947a 100644 --- a/kernel/sched_cpupri.c +++ b/kernel/sched_cpupri.c @@ -81,8 +81,21 @@ int cpupri_find(struct cpupri *cp, struct task_struct *p, if (cpumask_any_and(&p->cpus_allowed, vec->mask) >= nr_cpu_ids) continue; - if (lowest_mask) + if (lowest_mask) { cpumask_and(lowest_mask, &p->cpus_allowed, vec->mask); + + /* + * We have to ensure that we have at least one bit + * still set in the array, since the map could have + * been concurrently emptied between the first and + * second reads of vec->mask. If we hit this + * condition, simply act as though we never hit this + * priority level and continue on. + */ + if (cpumask_any(lowest_mask) >= nr_cpu_ids) + continue; + } + return 1; } |