summaryrefslogtreecommitdiff
path: root/arch/x86/realmode/rm/trampoline_32.S
diff options
context:
space:
mode:
authorJarkko Sakkinen <jarkko.sakkinen@intel.com>2012-05-08 22:22:40 +0400
committerH. Peter Anvin <hpa@linux.intel.com>2012-05-08 22:48:11 +0400
commit8e029fcdd8702719c9179317cae9ef84ebe7027e (patch)
tree12140b7331764ff0e0cd4e0d7bd290453d51110f /arch/x86/realmode/rm/trampoline_32.S
parent6feb592dceaed1a6cf26c9747b1180958d5156cd (diff)
downloadlinux-8e029fcdd8702719c9179317cae9ef84ebe7027e.tar.xz
x86, realmode: fix 64-bit wakeup sequence
There were number of issues in wakeup sequence: - Wakeup stack was placed in hardcoded address. - NX bit in EFER was not enabled. - Initialization incorrectly set physical address of secondary_startup_64. - Some alignment issues. This patch fixes these issues and in addition: - Unifies coding conventions in .S files. - Sets alignments of code and data right. Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@intel.com> Link: http://lkml.kernel.org/r/1336501366-28617-18-git-send-email-jarkko.sakkinen@intel.com Originally-by: H. Peter Anvin <hpa@linux.intel.com> Cc: Rafael J. Wysocki <rjw@sisk.pl> Cc: Len Brown <len.brown@intel.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/realmode/rm/trampoline_32.S')
-rw-r--r--arch/x86/realmode/rm/trampoline_32.S29
1 files changed, 15 insertions, 14 deletions
diff --git a/arch/x86/realmode/rm/trampoline_32.S b/arch/x86/realmode/rm/trampoline_32.S
index 279f82ef7a9e..1ecdbb59191b 100644
--- a/arch/x86/realmode/rm/trampoline_32.S
+++ b/arch/x86/realmode/rm/trampoline_32.S
@@ -33,10 +33,9 @@
.text
.code16
- .globl trampoline_data
- .balign PAGE_SIZE
-trampoline_data:
+ .balign PAGE_SIZE
+ENTRY(trampoline_data)
wbinvd # Needed for NUMA-Q should be harmless for others
LJMPW_RM(1f)
@@ -70,20 +69,22 @@ trampoline_data:
ENTRY(startup_32) # note: also used from wakeup_asm.S
jmp *%eax
- .data
- .globl startup_32_smp, boot_gdt, trampoline_status
- .balign 4
-boot_gdt_descr:
- .word __BOOT_DS + 7 # gdt limit
-boot_gdt:
- .long 0 # gdt base
+ .section ".rodata","a"
+ .balign 4
boot_idt_descr:
.word 0 # idt limit = 0
.long 0 # idt base = 0L
-trampoline_status:
- .long 0
+ .data
-startup_32_smp:
- .long 0
+boot_gdt_descr:
+ .word __BOOT_DS + 7 # gdt limit
+GLOBAL(boot_gdt)
+ .long 0 # gdt base
+
+ .bss
+
+ .balign 4
+GLOBAL(trampoline_status) .space 4
+GLOBAL(startup_32_smp) .space 4