diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2008-07-27 15:43:11 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2008-07-27 15:43:11 -0400 |
| commit | 583323b9d2f624884a8c9563fb5a4d795f39ab07 (patch) | |
| tree | 33a8a505507f6b591c8181b5762ad20a063042fa | |
| 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>
| -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 f67e93441caf..a7010c3a377a 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 | |||
| 456 | 1: | 456 | 1: |
| 457 | #endif /* CONFIG_SMP */ | 457 | #endif /* CONFIG_SMP */ |
| 458 | jmp *(initial_code) | 458 | jmp *(initial_code) |
| 459 | .align 4 | ||
| 460 | ENTRY(initial_code) | ||
| 461 | .long i386_start_kernel | ||
| 462 | 459 | ||
| 463 | /* | 460 | /* |
| 464 | * We depend on ET to be correct. This checks for 287/387. | 461 | * We depend on ET to be correct. This checks for 287/387. |
| @@ -601,6 +598,11 @@ ignore_int: | |||
| 601 | #endif | 598 | #endif |
| 602 | iret | 599 | iret |
| 603 | 600 | ||
| 601 | .section .cpuinit.data,"wa" | ||
| 602 | .align 4 | ||
| 603 | ENTRY(initial_code) | ||
| 604 | .long i386_start_kernel | ||
| 605 | |||
| 604 | .section .text | 606 | .section .text |
| 605 | /* | 607 | /* |
| 606 | * Real beginning of normal "text" segment | 608 | * Real beginning of normal "text" segment |
