aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@evo.osdl.org>2005-07-22 18:29:40 -0400
committerLinus Torvalds <torvalds@evo.osdl.org>2005-07-22 18:29:40 -0400
commit72538d8565b0205240d88591b72db3c7f3f1881a (patch)
treef7d1a78787e8027b6144487580e1c811cdb4fc2a /arch/i386/kernel
parent2847e3478c3d8119eedc3e0cb85a308b21f681dd (diff)
Remove "noreplacement" kernel command line option.
It is no longer valid to not replace instructions, since we depend on different behaviour depending on CPU capabilities. If you need to limit the capabilities of the replacements (because the boot CPU has features that non-boot CPU's do not have, for example), you need to explicitly disable those capabilities that are not shared across all CPU's. For example, if your boot CPU has FXSR, but other CPU's in your system do not, you need to use the "nofxsr" kernel command line, not disable instruction replacement per se.
Diffstat (limited to 'arch/i386/kernel')
-rw-r--r--arch/i386/kernel/setup.c14
1 files changed, 1 insertions, 13 deletions
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c
index 7306353c520e..af4de58cab54 100644
--- a/arch/i386/kernel/setup.c
+++ b/arch/i386/kernel/setup.c
@@ -1414,7 +1414,7 @@ static struct nop {
1414 This runs before SMP is initialized to avoid SMP problems with 1414 This runs before SMP is initialized to avoid SMP problems with
1415 self modifying code. This implies that assymetric systems where 1415 self modifying code. This implies that assymetric systems where
1416 APs have less capabilities than the boot processor are not handled. 1416 APs have less capabilities than the boot processor are not handled.
1417 In this case boot with "noreplacement". */ 1417 Tough. Make sure you disable such features by hand. */
1418void apply_alternatives(void *start, void *end) 1418void apply_alternatives(void *start, void *end)
1419{ 1419{
1420 struct alt_instr *a; 1420 struct alt_instr *a;
@@ -1442,24 +1442,12 @@ void apply_alternatives(void *start, void *end)
1442 } 1442 }
1443} 1443}
1444 1444
1445static int no_replacement __initdata = 0;
1446
1447void __init alternative_instructions(void) 1445void __init alternative_instructions(void)
1448{ 1446{
1449 extern struct alt_instr __alt_instructions[], __alt_instructions_end[]; 1447 extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
1450 if (no_replacement)
1451 return;
1452 apply_alternatives(__alt_instructions, __alt_instructions_end); 1448 apply_alternatives(__alt_instructions, __alt_instructions_end);
1453} 1449}
1454 1450
1455static int __init noreplacement_setup(char *s)
1456{
1457 no_replacement = 1;
1458 return 0;
1459}
1460
1461__setup("noreplacement", noreplacement_setup);
1462
1463static char * __init machine_specific_memory_setup(void); 1451static char * __init machine_specific_memory_setup(void);
1464 1452
1465#ifdef CONFIG_MCA 1453#ifdef CONFIG_MCA