[PATCH v2 6/9] x86/asm/head: use a common function for starting CPUs

2016-09-21 Thread Josh Poimboeuf
There are two different pieces of code for starting a CPU: start_cpu0()
and the end of secondary_startup_64().  They're identical except for the
stack setup.  Combine the common parts into a shared start_cpu()
function.

Signed-off-by: Josh Poimboeuf 
---
 arch/x86/kernel/head_64.S | 22 +++---
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index c98a559..3621ad2 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -264,13 +264,17 @@ ENTRY(secondary_startup_64)
movl$MSR_GS_BASE,%ecx
movlinitial_gs(%rip),%eax
movlinitial_gs+4(%rip),%edx
-   wrmsr   
+   wrmsr
 
/* rsi is pointer to real mode structure with interesting info.
   pass it to C */
movq%rsi, %rdi
-   
-   /* Finally jump to run C code and to be on real kernel address
+   jmp start_cpu
+ENDPROC(secondary_startup_64)
+
+ENTRY(start_cpu)
+   /*
+* Jump to run C code and to be on a real kernel address.
 * Since we are running on identity-mapped space we have to jump
 * to the full 64bit address, this is only possible as indirect
 * jump.  In addition we need to ensure %cs is set so we make this
@@ -299,7 +303,7 @@ ENTRY(secondary_startup_64)
pushq   $__KERNEL_CS# set correct cs
pushq   %rax# target address in negative space
lretq
-ENDPROC(secondary_startup_64)
+ENDPROC(start_cpu)
 
 #include "verify_cpu.S"
 
@@ -307,15 +311,11 @@ ENDPROC(secondary_startup_64)
 /*
  * 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().
+ * start_secondary() via start_cpu().
  */
 ENTRY(start_cpu0)
-   movq initial_stack(%rip),%rsp
-   movqinitial_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
+   movqinitial_stack(%rip), %rsp
+   jmp start_cpu
 ENDPROC(start_cpu0)
 #endif
 
-- 
2.7.4



[PATCH v2 6/9] x86/asm/head: use a common function for starting CPUs

2016-09-21 Thread Josh Poimboeuf
There are two different pieces of code for starting a CPU: start_cpu0()
and the end of secondary_startup_64().  They're identical except for the
stack setup.  Combine the common parts into a shared start_cpu()
function.

Signed-off-by: Josh Poimboeuf 
---
 arch/x86/kernel/head_64.S | 22 +++---
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index c98a559..3621ad2 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -264,13 +264,17 @@ ENTRY(secondary_startup_64)
movl$MSR_GS_BASE,%ecx
movlinitial_gs(%rip),%eax
movlinitial_gs+4(%rip),%edx
-   wrmsr   
+   wrmsr
 
/* rsi is pointer to real mode structure with interesting info.
   pass it to C */
movq%rsi, %rdi
-   
-   /* Finally jump to run C code and to be on real kernel address
+   jmp start_cpu
+ENDPROC(secondary_startup_64)
+
+ENTRY(start_cpu)
+   /*
+* Jump to run C code and to be on a real kernel address.
 * Since we are running on identity-mapped space we have to jump
 * to the full 64bit address, this is only possible as indirect
 * jump.  In addition we need to ensure %cs is set so we make this
@@ -299,7 +303,7 @@ ENTRY(secondary_startup_64)
pushq   $__KERNEL_CS# set correct cs
pushq   %rax# target address in negative space
lretq
-ENDPROC(secondary_startup_64)
+ENDPROC(start_cpu)
 
 #include "verify_cpu.S"
 
@@ -307,15 +311,11 @@ ENDPROC(secondary_startup_64)
 /*
  * 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().
+ * start_secondary() via start_cpu().
  */
 ENTRY(start_cpu0)
-   movq initial_stack(%rip),%rsp
-   movqinitial_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
+   movqinitial_stack(%rip), %rsp
+   jmp start_cpu
 ENDPROC(start_cpu0)
 #endif
 
-- 
2.7.4