diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 15 |
1 files changed, 0 insertions, 15 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 5b2959b3ffc2..f88bd984df35 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -1241,21 +1241,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1241 | /* Need tasklist lock for parent etc handling! */ | 1241 | /* Need tasklist lock for parent etc handling! */ |
| 1242 | write_lock_irq(&tasklist_lock); | 1242 | write_lock_irq(&tasklist_lock); |
| 1243 | 1243 | ||
| 1244 | /* | ||
| 1245 | * The task hasn't been attached yet, so its cpus_allowed mask will | ||
| 1246 | * not be changed, nor will its assigned CPU. | ||
| 1247 | * | ||
| 1248 | * The cpus_allowed mask of the parent may have changed after it was | ||
| 1249 | * copied first time - so re-copy it here, then check the child's CPU | ||
| 1250 | * to ensure it is on a valid CPU (and if not, just force it back to | ||
| 1251 | * parent's CPU). This avoids alot of nasty races. | ||
| 1252 | */ | ||
| 1253 | p->cpus_allowed = current->cpus_allowed; | ||
| 1254 | p->rt.nr_cpus_allowed = current->rt.nr_cpus_allowed; | ||
| 1255 | if (unlikely(!cpu_isset(task_cpu(p), p->cpus_allowed) || | ||
| 1256 | !cpu_online(task_cpu(p)))) | ||
| 1257 | set_task_cpu(p, smp_processor_id()); | ||
| 1258 | |||
| 1259 | /* CLONE_PARENT re-uses the old parent */ | 1244 | /* CLONE_PARENT re-uses the old parent */ |
| 1260 | if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) { | 1245 | if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) { |
| 1261 | p->real_parent = current->real_parent; | 1246 | p->real_parent = current->real_parent; |
