x86: use stack_start in x86_64
authorGlauber Costa <gcosta@redhat.com>
Wed, 28 May 2008 01:22:54 +0000 (18:22 -0700)
committerIngo Molnar <mingo@elte.hu>
Tue, 8 Jul 2008 10:48:14 +0000 (12:48 +0200)
call x86_64's init_rsp stack_start, just as i386 does.
Put a zeroed stack segment for consistency. With this,
we can eliminate one ugly ifdef in smpboot.c.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/acpi/sleep.c
arch/x86/kernel/head_64.S
arch/x86/kernel/smpboot.c

index 36af01f029eddbfe7b2bdc05a0f2b59ab5c3666a..a81f468ab410ef2fe47ae9164bce36c83f76c038 100644 (file)
@@ -86,7 +86,7 @@ int acpi_save_state_mem(void)
        saved_magic = 0x12345678;
 #else /* CONFIG_64BIT */
        header->trampoline_segment = setup_trampoline() >> 4;
-       init_rsp = (unsigned long)temp_stack + 4096;
+       stack_start.sp = temp_stack + 4096;
        initial_code = (unsigned long)wakeup_long64;
        saved_magic = 0x123456789abcdef0;
 #endif /* CONFIG_64BIT */
index 263b9d14753ed5871deccbff6a994bbc3cdbecfa..918a2711aff60f56f5895373b3286a6ef3f94935 100644 (file)
@@ -191,7 +191,7 @@ ENTRY(secondary_startup_64)
        movq    %rax, %cr0
 
        /* Setup a boot time stack */
-       movq init_rsp(%rip),%rsp
+       movq stack_start(%rip),%rsp
 
        /* zero EFLAGS after setting rsp */
        pushq $0
@@ -252,8 +252,9 @@ ENTRY(secondary_startup_64)
        .quad   x86_64_start_kernel
        __FINITDATA
 
-       ENTRY(init_rsp)
+       ENTRY(stack_start)
        .quad  init_thread_union+THREAD_SIZE-8
+       .word  0
 
 bad_address:
        jmp bad_address
index d3ad4e09455ba0da5dbec8c0a95cbd50046b4471..a71e3cad5470c969c8a20f6306727e5c5403f8e5 100644 (file)
@@ -714,11 +714,7 @@ wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip)
         * target processor state.
         */
        startup_ipi_hook(phys_apicid, (unsigned long) start_secondary,
-#ifdef CONFIG_X86_64
-                        (unsigned long)init_rsp);
-#else
                         (unsigned long)stack_start.sp);
-#endif
 
        /*
         * Run STARTUP IPI loop.
@@ -905,15 +901,14 @@ do_rest:
        early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu);
        c_idle.idle->thread.ip = (unsigned long) start_secondary;
        /* Stack for startup_32 can be just as for start_secondary onwards */
-       stack_start.sp = (void *) c_idle.idle->thread.sp;
        irq_ctx_init(cpu);
 #else
        cpu_pda(cpu)->pcurrent = c_idle.idle;
-       init_rsp = c_idle.idle->thread.sp;
        load_sp0(&per_cpu(init_tss, cpu), &c_idle.idle->thread);
        initial_code = (unsigned long)start_secondary;
        clear_tsk_thread_flag(c_idle.idle, TIF_FORK);
 #endif
+       stack_start.sp = (void *) c_idle.idle->thread.sp;
 
        /* start_ip had better be page-aligned! */
        start_ip = setup_trampoline();