x86: fix cpu hotplug on 32bit
authorThomas Gleixner <tglx@linutronix.de>
Sun, 27 Jul 2008 19:43:11 +0000 (21:43 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Sun, 27 Jul 2008 19:43:11 +0000 (21:43 +0200)
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>
arch/x86/kernel/head_32.S

index f67e93441caf2a892d637a54061257b1d4002828..a7010c3a377a436f29552e3b26a2b9a0b7a35084 100644 (file)
@@ -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