Skip to content

Commit

Permalink
x86: don't span a new worker in __smp_prepare_cpu
Browse files Browse the repository at this point in the history
We can do it now that do_boot_cpu has its own worker.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Glauber de Oliveira Costa authored and Ingo Molnar committed Apr 17, 2008
1 parent 365c894 commit 4c07ad6
Showing 1 changed file with 2 additions and 28 deletions.
30 changes: 2 additions & 28 deletions arch/x86/kernel/smpboot_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -699,44 +699,18 @@ void cpu_exit_clear(void)
}
#endif

struct warm_boot_cpu_info {
struct completion *complete;
struct work_struct task;
int apicid;
int cpu;
};

static void __cpuinit do_warm_boot_cpu(struct work_struct *work)
{
struct warm_boot_cpu_info *info =
container_of(work, struct warm_boot_cpu_info, task);
do_boot_cpu(info->apicid, info->cpu);
complete(info->complete);
}

static void __cpuinit __smp_prepare_cpu(int cpu)
{
DECLARE_COMPLETION_ONSTACK(done);
struct warm_boot_cpu_info info;
int apicid;

apicid = per_cpu(x86_cpu_to_apicid, cpu);

info.complete = &done;
info.apicid = apicid;
info.cpu = cpu;
INIT_WORK(&info.task, do_warm_boot_cpu);

/* init low mem mapping */
clone_pgd_range(swapper_pg_dir, swapper_pg_dir + USER_PGD_PTRS,
min_t(unsigned long, KERNEL_PGD_PTRS, USER_PGD_PTRS));
flush_tlb_all();
if (!keventd_up() || current_is_keventd())
info.task.func(&info.task);
else {
schedule_work(&info.task);
wait_for_completion(&done);
}

do_boot_cpu(apicid, cpu);
}

static int boot_cpu_logical_apicid;
Expand Down

0 comments on commit 4c07ad6

Please sign in to comment.