Commit edcd262d authored by Ingo Molnar's avatar Ingo Molnar Committed by Linus Torvalds

- this patch fixes the migration init to correctly work with the

  new hot-pluggable CPU enumeration method, and the possibility
  to not boot on CPU#0.

(btw., i find RR's comment offensive. How can any code be called 'crap' just
because the author of a new patch has not converted the code to the new
assumptions yet? The original code was perfectly valid.)
parent 278b098b
...@@ -1775,6 +1775,8 @@ void set_cpus_allowed(task_t *p, unsigned long new_mask) ...@@ -1775,6 +1775,8 @@ void set_cpus_allowed(task_t *p, unsigned long new_mask)
preempt_enable(); preempt_enable();
} }
static __initdata int master_migration_thread;
static int migration_thread(void * bind_cpu) static int migration_thread(void * bind_cpu)
{ {
int cpu = (int) (long) bind_cpu; int cpu = (int) (long) bind_cpu;
...@@ -1786,14 +1788,12 @@ static int migration_thread(void * bind_cpu) ...@@ -1786,14 +1788,12 @@ static int migration_thread(void * bind_cpu)
sigfillset(&current->blocked); sigfillset(&current->blocked);
set_fs(KERNEL_DS); set_fs(KERNEL_DS);
/* FIXME: First CPU may not be zero, but this crap code
vanishes with hotplug cpu patch anyway. --RR */
/* /*
* The first migration thread is started on CPU #0. This one can * The first migration thread is started on the boot CPU, it
* migrate the other migration threads to their destination CPUs. * migrates the other migration threads to their destination CPUs.
*/ */
if (cpu != 0) { if (cpu != master_migration_thread) {
while (!cpu_rq(0)->migration_thread) while (!cpu_rq(master_migration_thread)->migration_thread)
yield(); yield();
set_cpus_allowed(current, 1UL << cpu); set_cpus_allowed(current, 1UL << cpu);
} }
...@@ -1857,7 +1857,9 @@ void __init migration_init(void) ...@@ -1857,7 +1857,9 @@ void __init migration_init(void)
{ {
int cpu; int cpu;
current->cpus_allowed = 1UL << 0; master_migration_thread = smp_processor_id();
current->cpus_allowed = 1UL << master_migration_thread;
for (cpu = 0; cpu < NR_CPUS; cpu++) { for (cpu = 0; cpu < NR_CPUS; cpu++) {
if (!cpu_online(cpu)) if (!cpu_online(cpu))
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment