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.
This commit is contained in:
parent
2847e3478c
commit
72538d8565
1 changed files with 1 additions and 13 deletions
|
@ -1414,7 +1414,7 @@ static struct nop {
|
||||||
This runs before SMP is initialized to avoid SMP problems with
|
This runs before SMP is initialized to avoid SMP problems with
|
||||||
self modifying code. This implies that assymetric systems where
|
self modifying code. This implies that assymetric systems where
|
||||||
APs have less capabilities than the boot processor are not handled.
|
APs have less capabilities than the boot processor are not handled.
|
||||||
In this case boot with "noreplacement". */
|
Tough. Make sure you disable such features by hand. */
|
||||||
void apply_alternatives(void *start, void *end)
|
void apply_alternatives(void *start, void *end)
|
||||||
{
|
{
|
||||||
struct alt_instr *a;
|
struct alt_instr *a;
|
||||||
|
@ -1442,24 +1442,12 @@ void apply_alternatives(void *start, void *end)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int no_replacement __initdata = 0;
|
|
||||||
|
|
||||||
void __init alternative_instructions(void)
|
void __init alternative_instructions(void)
|
||||||
{
|
{
|
||||||
extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
|
extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
|
||||||
if (no_replacement)
|
|
||||||
return;
|
|
||||||
apply_alternatives(__alt_instructions, __alt_instructions_end);
|
apply_alternatives(__alt_instructions, __alt_instructions_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init noreplacement_setup(char *s)
|
|
||||||
{
|
|
||||||
no_replacement = 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
__setup("noreplacement", noreplacement_setup);
|
|
||||||
|
|
||||||
static char * __init machine_specific_memory_setup(void);
|
static char * __init machine_specific_memory_setup(void);
|
||||||
|
|
||||||
#ifdef CONFIG_MCA
|
#ifdef CONFIG_MCA
|
||||||
|
|
Loading…
Reference in a new issue