diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-09-04 05:47:48 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-10-04 15:23:36 -0400 |
commit | f00ec48fadf5e37e7889f14cff900aa70d18b644 (patch) | |
tree | 421cbce97167a78532aa825624f380caade3c0d2 /arch/arm/Kconfig | |
parent | 067173526c3bbc2eaeefcf6b7b2a9d998b9e8042 (diff) |
ARM: Allow SMP kernels to boot on UP systems
UP systems do not implement all the instructions that SMP systems have,
so in order to boot a SMP kernel on a UP system, we need to rewrite
parts of the kernel.
Do this using an 'alternatives' scheme, where the kernel code and data
is modified prior to initialization to replace the SMP instructions,
thereby rendering the problematical code ineffectual. We use the linker
to generate a list of 32-bit word locations and their replacement values,
and run through these replacements when we detect a UP system.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/Kconfig')
-rw-r--r-- | arch/arm/Kconfig | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 6a939e64cbd7..f6cdc21b562c 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1191,6 +1191,19 @@ config SMP | |||
1191 | 1191 | ||
1192 | If you don't know what to do here, say N. | 1192 | If you don't know what to do here, say N. |
1193 | 1193 | ||
1194 | config SMP_ON_UP | ||
1195 | bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" | ||
1196 | depends on EXPERIMENTAL | ||
1197 | depends on SMP && !XIP && !THUMB2_KERNEL | ||
1198 | default y | ||
1199 | help | ||
1200 | SMP kernels contain instructions which fail on non-SMP processors. | ||
1201 | Enabling this option allows the kernel to modify itself to make | ||
1202 | these instructions safe. Disabling it allows about 1K of space | ||
1203 | savings. | ||
1204 | |||
1205 | If you don't know what to do here, say Y. | ||
1206 | |||
1194 | config HAVE_ARM_SCU | 1207 | config HAVE_ARM_SCU |
1195 | bool | 1208 | bool |
1196 | depends on SMP | 1209 | depends on SMP |