|
|
@@ -1077,7 +1077,8 @@ static int __set_cpus_allowed_ptr(struct task_struct *p,
|
|
|
if (cpumask_equal(&p->cpus_allowed, new_mask))
|
|
|
goto out;
|
|
|
|
|
|
- if (!cpumask_intersects(new_mask, cpu_valid_mask)) {
|
|
|
+ dest_cpu = cpumask_any_and(cpu_valid_mask, new_mask);
|
|
|
+ if (dest_cpu >= nr_cpu_ids) {
|
|
|
ret = -EINVAL;
|
|
|
goto out;
|
|
|
}
|
|
|
@@ -1098,7 +1099,6 @@ static int __set_cpus_allowed_ptr(struct task_struct *p,
|
|
|
if (cpumask_test_cpu(task_cpu(p), new_mask))
|
|
|
goto out;
|
|
|
|
|
|
- dest_cpu = cpumask_any_and(cpu_valid_mask, new_mask);
|
|
|
if (task_running(rq, p) || p->state == TASK_WAKING) {
|
|
|
struct migration_arg arg = { p, dest_cpu };
|
|
|
/* Need help from migration thread: drop lock and wait. */
|