|
@@ -252,6 +252,22 @@ ENTRY(secondary_startup_64)
|
|
|
pushq %rax # target address in negative space
|
|
|
lretq
|
|
|
|
|
|
+#ifdef CONFIG_HOTPLUG_CPU
|
|
|
+/*
|
|
|
+ * Boot CPU0 entry point. It's called from play_dead(). Everything has been set
|
|
|
+ * up already except stack. We just set up stack here. Then call
|
|
|
+ * start_secondary().
|
|
|
+ */
|
|
|
+ENTRY(start_cpu0)
|
|
|
+ movq stack_start(%rip),%rsp
|
|
|
+ movq initial_code(%rip),%rax
|
|
|
+ pushq $0 # fake return address to stop unwinder
|
|
|
+ pushq $__KERNEL_CS # set correct cs
|
|
|
+ pushq %rax # target address in negative space
|
|
|
+ lretq
|
|
|
+ENDPROC(start_cpu0)
|
|
|
+#endif
|
|
|
+
|
|
|
/* SMP bootup changes these two */
|
|
|
__REFDATA
|
|
|
.align 8
|