@@ -126,10 +126,10 @@ start32:
ap_init:
cld
- sgdtl ap_gdt_descr // must be close to sipi_entry for real mode access to work
- lea sipi_entry, %esi
+ sgdtl ap_rm_gdt_descr // must be close to rm_trampoline for real mode access to work
+ lea rm_trampoline, %esi
xor %edi, %edi
- mov $(sipi_end - sipi_entry), %ecx
+ mov $(rm_trampoline_end - rm_trampoline), %ecx
rep movsb
mov $APIC_DEFAULT_PHYS_BASE, %eax
movl $(APIC_DEST_ALLBUT | APIC_DEST_PHYSICAL | APIC_DM_INIT | APIC_INT_ASSERT), APIC_ICR(%eax)
@@ -146,16 +146,4 @@ online_cpus:
.align 2
cpu_online_count: .word 1
-.code16
-sipi_entry:
- mov %cr0, %eax
- or $1, %eax
- mov %eax, %cr0
- lgdtl ap_gdt_descr - sipi_entry
- ljmpl $8, $ap_start32
-
-ap_gdt_descr:
- .word 0
- .long 0
-
-sipi_end:
+#include "start16.S"
@@ -156,19 +156,7 @@ gdt32:
.quad 0x00cf93000000ffff // flat 32-bit data segment
gdt32_end:
-.code16
-sipi_entry:
- mov %cr0, %eax
- or $1, %eax
- mov %eax, %cr0
- lgdtl gdt32_descr - sipi_entry
- ljmpl $8, $ap_start32
-
-gdt32_descr:
- .word gdt32_end - gdt32 - 1
- .long gdt32
-
-sipi_end:
+#include "start16.S"
.code32
ap_start32:
@@ -243,9 +231,9 @@ online_cpus:
ap_init:
cld
- lea sipi_entry, %rsi
+ lea rm_trampoline, %rsi
xor %rdi, %rdi
- mov $(sipi_end - sipi_entry), %rcx
+ mov $(rm_trampoline_end - rm_trampoline), %rcx
rep movsb
mov $APIC_DEFAULT_PHYS_BASE, %eax
movl $(APIC_DEST_ALLBUT | APIC_DEST_PHYSICAL | APIC_DM_INIT | APIC_INT_ASSERT), APIC_ICR(%rax)
new file mode 100644
@@ -0,0 +1,27 @@
+/* Common 16-bit bootstrapping code. */
+
+.code16
+.globl rm_trampoline
+rm_trampoline:
+
+/* Store SIPI vector code at the beginning of trampoline. */
+sipi_entry:
+ mov %cr0, %eax
+ or $1, %eax
+ mov %eax, %cr0
+ lgdtl ap_rm_gdt_descr - sipi_entry
+ ljmpl $8, $ap_start32
+sipi_end:
+
+.globl ap_rm_gdt_descr
+ap_rm_gdt_descr:
+#ifdef __i386__
+ .word 0
+ .long 0
+#else
+ .word gdt32_end - gdt32 - 1
+ .long gdt32
+#endif
+
+.globl rm_trampoline_end
+rm_trampoline_end:
i386 and x86_64 each maintain their own copy of the realmode trampoline (sipi_entry). Move the 16-bit SIPI vector and GDT to a new start16.S to be shared by both. Signed-off-by: Varad Gautam <varad.gautam@suse.com> --- x86/cstart.S | 20 ++++---------------- x86/cstart64.S | 18 +++--------------- x86/start16.S | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 31 deletions(-) create mode 100644 x86/start16.S