Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9cf4f298 authored by Glauber Costa's avatar Glauber Costa Committed by Ingo Molnar
Browse files

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: default avatarGlauber Costa <gcosta@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent a7bf0bd5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 */
+3 −2
Original line number Diff line number Diff line
@@ -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
+1 −6
Original line number Diff line number Diff line
@@ -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 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
	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();