diff options
author | Glauber Costa <gcosta@redhat.com> | 2008-05-27 21:22:54 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 06:48:14 -0400 |
commit | 9cf4f298e29abba25c16679fe7be70898223167e (patch) | |
tree | 009af01f7c8001fb86fcfa25226d0c78248b83c9 /arch/x86/kernel/smpboot.c | |
parent | a7bf0bd5e6af7fe69342dabf2a3b721f0163469a (diff) |
x86: use stack_start in x86_64
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>
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r-- | arch/x86/kernel/smpboot.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index d3ad4e09455b..a71e3cad5470 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -714,11 +714,7 @@ wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip) | |||
714 | * target processor state. | 714 | * target processor state. |
715 | */ | 715 | */ |
716 | startup_ipi_hook(phys_apicid, (unsigned long) start_secondary, | 716 | startup_ipi_hook(phys_apicid, (unsigned long) start_secondary, |
717 | #ifdef CONFIG_X86_64 | ||
718 | (unsigned long)init_rsp); | ||
719 | #else | ||
720 | (unsigned long)stack_start.sp); | 717 | (unsigned long)stack_start.sp); |
721 | #endif | ||
722 | 718 | ||
723 | /* | 719 | /* |
724 | * Run STARTUP IPI loop. | 720 | * Run STARTUP IPI loop. |
@@ -905,15 +901,14 @@ do_rest: | |||
905 | early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu); | 901 | early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu); |
906 | c_idle.idle->thread.ip = (unsigned long) start_secondary; | 902 | c_idle.idle->thread.ip = (unsigned long) start_secondary; |
907 | /* Stack for startup_32 can be just as for start_secondary onwards */ | 903 | /* Stack for startup_32 can be just as for start_secondary onwards */ |
908 | stack_start.sp = (void *) c_idle.idle->thread.sp; | ||
909 | irq_ctx_init(cpu); | 904 | irq_ctx_init(cpu); |
910 | #else | 905 | #else |
911 | cpu_pda(cpu)->pcurrent = c_idle.idle; | 906 | cpu_pda(cpu)->pcurrent = c_idle.idle; |
912 | init_rsp = c_idle.idle->thread.sp; | ||
913 | load_sp0(&per_cpu(init_tss, cpu), &c_idle.idle->thread); | 907 | load_sp0(&per_cpu(init_tss, cpu), &c_idle.idle->thread); |
914 | initial_code = (unsigned long)start_secondary; | 908 | initial_code = (unsigned long)start_secondary; |
915 | clear_tsk_thread_flag(c_idle.idle, TIF_FORK); | 909 | clear_tsk_thread_flag(c_idle.idle, TIF_FORK); |
916 | #endif | 910 | #endif |
911 | stack_start.sp = (void *) c_idle.idle->thread.sp; | ||
917 | 912 | ||
918 | /* start_ip had better be page-aligned! */ | 913 | /* start_ip had better be page-aligned! */ |
919 | start_ip = setup_trampoline(); | 914 | start_ip = setup_trampoline(); |