diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 16 | 
1 files changed, 1 insertions, 15 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 5b2959b3ffc..17bbf093356 100644 --- a/kernel/fork.c +++ b/kernel/fork.c  | |||
| @@ -86,6 +86,7 @@ int max_threads; /* tunable limit on nr_threads */ | |||
| 86 | DEFINE_PER_CPU(unsigned long, process_counts) = 0; | 86 | DEFINE_PER_CPU(unsigned long, process_counts) = 0; | 
| 87 | 87 | ||
| 88 | __cacheline_aligned DEFINE_RWLOCK(tasklist_lock); /* outer */ | 88 | __cacheline_aligned DEFINE_RWLOCK(tasklist_lock); /* outer */ | 
| 89 | EXPORT_SYMBOL_GPL(tasklist_lock); | ||
| 89 | 90 | ||
| 90 | int nr_processes(void) | 91 | int nr_processes(void) | 
| 91 | { | 92 | { | 
| @@ -1241,21 +1242,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1241 | /* Need tasklist lock for parent etc handling! */ | 1242 | /* Need tasklist lock for parent etc handling! */ | 
| 1242 | write_lock_irq(&tasklist_lock); | 1243 | write_lock_irq(&tasklist_lock); | 
| 1243 | 1244 | ||
| 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 */ | 1245 | /* CLONE_PARENT re-uses the old parent */ | 
| 1260 | if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) { | 1246 | if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) { | 
| 1261 | p->real_parent = current->real_parent; | 1247 | p->real_parent = current->real_parent; | 
