diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-07-27 21:43:11 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-07-27 21:43:11 +0200 |
commit | 583323b9d2f624884a8c9563fb5a4d795f39ab07 (patch) | |
tree | 33a8a505507f6b591c8181b5762ad20a063042fa /arch/x86/kernel/head_32.S | |
parent | 8be1a6d6c77ab4532e4476fdb8177030ef48b52c (diff) |
x86: fix cpu hotplug on 32bit
commit 3e9704739daf46a8ba6593d749c67b5f7cd633d2 ("x86: boot secondary
cpus through initial_code") causes the kernel to crash when a CPU is
brought online after the read only sections have been write
protected. The write to initial_code in do_boot_cpu() fails.
Move inital_code to .cpuinit.data section.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel/head_32.S')
-rw-r--r-- | arch/x86/kernel/head_32.S | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index f67e93441ca..a7010c3a377 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S @@ -456,9 +456,6 @@ is386: movl $2,%ecx # set MP 1: #endif /* CONFIG_SMP */ jmp *(initial_code) -.align 4 -ENTRY(initial_code) - .long i386_start_kernel /* * We depend on ET to be correct. This checks for 287/387. @@ -601,6 +598,11 @@ ignore_int: #endif iret +.section .cpuinit.data,"wa" +.align 4 +ENTRY(initial_code) + .long i386_start_kernel + .section .text /* * Real beginning of normal "text" segment |