diff options
Diffstat (limited to 'kernel/smpboot.c')
| -rw-r--r-- | kernel/smpboot.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/kernel/smpboot.c b/kernel/smpboot.c index 8eaed9aa9cf0..02fc5c933673 100644 --- a/kernel/smpboot.c +++ b/kernel/smpboot.c | |||
| @@ -185,8 +185,18 @@ __smpboot_create_thread(struct smp_hotplug_thread *ht, unsigned int cpu) | |||
| 185 | } | 185 | } |
| 186 | get_task_struct(tsk); | 186 | get_task_struct(tsk); |
| 187 | *per_cpu_ptr(ht->store, cpu) = tsk; | 187 | *per_cpu_ptr(ht->store, cpu) = tsk; |
| 188 | if (ht->create) | 188 | if (ht->create) { |
| 189 | ht->create(cpu); | 189 | /* |
| 190 | * Make sure that the task has actually scheduled out | ||
| 191 | * into park position, before calling the create | ||
| 192 | * callback. At least the migration thread callback | ||
| 193 | * requires that the task is off the runqueue. | ||
| 194 | */ | ||
| 195 | if (!wait_task_inactive(tsk, TASK_PARKED)) | ||
| 196 | WARN_ON(1); | ||
| 197 | else | ||
| 198 | ht->create(cpu); | ||
| 199 | } | ||
| 190 | return 0; | 200 | return 0; |
| 191 | } | 201 | } |
| 192 | 202 | ||
