Loading arch/x86/kernel/smpboot_32.c +2 −28 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
arch/x86/kernel/smpboot_32.c +2 −28 Original line number Diff line number Diff line Loading @@ -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; Loading