This is not useful by itself, but part of making the
underlying work_struct have a static address.

Signed-off-by: Glauber Costa <[EMAIL PROTECTED]>
---
 arch/x86/kernel/smpboot_64.c |   37 +++++++++++++++++++------------------
 1 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c
index d53bd6f..f15b774 100644
--- a/arch/x86/kernel/smpboot_64.c
+++ b/arch/x86/kernel/smpboot_64.c
@@ -553,11 +553,12 @@ static int __cpuinit do_boot_cpu(int cpu
        unsigned long boot_error;
        int timeout;
        unsigned long start_rip;
-       struct create_idle c_idle = {
-               .work = __WORK_INITIALIZER(c_idle.work, do_fork_idle),
+       struct create_idle create_idle = {
+               .work = __WORK_INITIALIZER(create_idle.work, do_fork_idle),
                .cpu = cpu,
-               .done = COMPLETION_INITIALIZER_ONSTACK(c_idle.done),
+               .done = COMPLETION_INITIALIZER_ONSTACK(create_idle.done),
        };
+       struct create_idle *c_idle = &create_idle;
 
        /* allocate memory for gdts of secondary cpus. Hotplug is considered */
        if (!cpu_gdt_descr[cpu].address &&
@@ -584,12 +585,12 @@ static int __cpuinit do_boot_cpu(int cpu
 
        alternatives_smp_switch(1);
 
-       c_idle.idle = get_idle_for_cpu(cpu);
+       c_idle->idle = get_idle_for_cpu(cpu);
 
-       if (c_idle.idle) {
-               c_idle.idle->thread.sp = (unsigned long) (((struct pt_regs *)
-                       (THREAD_SIZE +  task_stack_page(c_idle.idle))) - 1);
-               init_idle(c_idle.idle, cpu);
+       if (c_idle->idle) {
+               c_idle->idle->thread.sp = (unsigned long) (((struct pt_regs *)
+                       (THREAD_SIZE +  task_stack_page(c_idle->idle))) - 1);
+               init_idle(c_idle->idle, cpu);
                goto do_rest;
        }
 
@@ -604,29 +605,29 @@ static int __cpuinit do_boot_cpu(int cpu
         * thread.
         */
        if (!keventd_up() || current_is_keventd())
-               c_idle.work.func(&c_idle.work);
+               c_idle->work.func(&c_idle->work);
        else {
-               schedule_work(&c_idle.work);
-               wait_for_completion(&c_idle.done);
+               schedule_work(&c_idle->work);
+               wait_for_completion(&c_idle->done);
        }
 
-       if (IS_ERR(c_idle.idle)) {
+       if (IS_ERR(c_idle->idle)) {
                printk("failed fork for CPU %d\n", cpu);
-               return PTR_ERR(c_idle.idle);
+               return PTR_ERR(c_idle->idle);
        }
 
-       set_idle_for_cpu(cpu, c_idle.idle);
+       set_idle_for_cpu(cpu, c_idle->idle);
 
 do_rest:
 
-       cpu_pda(cpu)->pcurrent = c_idle.idle;
+       cpu_pda(cpu)->pcurrent = c_idle->idle;
 
        start_rip = setup_trampoline();
 
-       init_rsp = c_idle.idle->thread.sp;
-       load_sp0(&per_cpu(init_tss, cpu), &c_idle.idle->thread);
+       init_rsp = c_idle->idle->thread.sp;
+       load_sp0(&per_cpu(init_tss, cpu), &c_idle->idle->thread);
        initial_code = start_secondary;
-       clear_tsk_thread_flag(c_idle.idle, TIF_FORK);
+       clear_tsk_thread_flag(c_idle->idle, TIF_FORK);
 
        printk(KERN_INFO "Booting processor %d/%d APIC 0x%x\n", cpu,
                cpus_weight(cpu_present_map),
-- 
1.4.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to