x86/smpboot: Init apic mapping before usage
[cascardo/linux.git] / kernel / smpboot.c
index fc0d827..4a5c6e7 100644 (file)
@@ -122,12 +122,12 @@ static int smpboot_thread_fn(void *data)
 
                if (kthread_should_park()) {
                        __set_current_state(TASK_RUNNING);
+                       preempt_enable();
                        if (ht->park && td->status == HP_THREAD_ACTIVE) {
                                BUG_ON(td->cpu != smp_processor_id());
                                ht->park(td->cpu);
                                td->status = HP_THREAD_PARKED;
                        }
-                       preempt_enable();
                        kthread_parkme();
                        /* We might have been woken for stop */
                        continue;
@@ -186,6 +186,11 @@ __smpboot_create_thread(struct smp_hotplug_thread *ht, unsigned int cpu)
                kfree(td);
                return PTR_ERR(tsk);
        }
+       /*
+        * Park the thread so that it could start right on the CPU
+        * when it is available.
+        */
+       kthread_park(tsk);
        get_task_struct(tsk);
        *per_cpu_ptr(ht->store, cpu) = tsk;
        if (ht->create) {