diff options
Diffstat (limited to 'arch/x86/kernel/cpu/bugs.c')
| -rw-r--r-- | arch/x86/kernel/cpu/bugs.c | 26 | 
1 files changed, 22 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index bd17db15a2c1..a44ef52184df 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -16,15 +16,19 @@  #include <asm/msr.h>  #include <asm/paravirt.h>  #include <asm/alternative.h> +#include <asm/pgtable.h> +#include <asm/cacheflush.h>  void __init check_bugs(void)  {  	identify_boot_cpu(); -#ifndef CONFIG_SMP -	pr_info("CPU: "); -	print_cpu_info(&boot_cpu_data); -#endif +	if (!IS_ENABLED(CONFIG_SMP)) { +		pr_info("CPU: "); +		print_cpu_info(&boot_cpu_data); +	} + +#ifdef CONFIG_X86_32  	/*  	 * Check whether we are able to run this kernel safely on SMP.  	 * @@ -40,4 +44,18 @@ void __init check_bugs(void)  	alternative_instructions();  	fpu__init_check_bugs(); +#else /* CONFIG_X86_64 */ +	alternative_instructions(); + +	/* +	 * Make sure the first 2MB area is not mapped by huge pages +	 * There are typically fixed size MTRRs in there and overlapping +	 * MTRRs into large pages causes slow downs. +	 * +	 * Right now we don't do that with gbpages because there seems +	 * very little benefit for that case. +	 */ +	if (!direct_gbpages) +		set_memory_4k((unsigned long)__va(0), 1); +#endif  }  |