|
@@ -16,15 +16,19 @@
|
|
#include <asm/msr.h>
|
|
#include <asm/msr.h>
|
|
#include <asm/paravirt.h>
|
|
#include <asm/paravirt.h>
|
|
#include <asm/alternative.h>
|
|
#include <asm/alternative.h>
|
|
|
|
+#include <asm/pgtable.h>
|
|
|
|
+#include <asm/cacheflush.h>
|
|
|
|
|
|
void __init check_bugs(void)
|
|
void __init check_bugs(void)
|
|
{
|
|
{
|
|
identify_boot_cpu();
|
|
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.
|
|
* Check whether we are able to run this kernel safely on SMP.
|
|
*
|
|
*
|
|
@@ -40,4 +44,18 @@ void __init check_bugs(void)
|
|
alternative_instructions();
|
|
alternative_instructions();
|
|
|
|
|
|
fpu__init_check_bugs();
|
|
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
|
|
}
|
|
}
|