|
@@ -6,6 +6,10 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
#define DISABLE_BRANCH_PROFILING
|
|
#define DISABLE_BRANCH_PROFILING
|
|
|
|
+
|
|
|
|
+/* cpu_feature_enabled() cannot be used this early */
|
|
|
|
+#define USE_EARLY_PGTABLE_L5
|
|
|
|
+
|
|
#include <linux/init.h>
|
|
#include <linux/init.h>
|
|
#include <linux/linkage.h>
|
|
#include <linux/linkage.h>
|
|
#include <linux/types.h>
|
|
#include <linux/types.h>
|
|
@@ -32,11 +36,6 @@
|
|
#include <asm/microcode.h>
|
|
#include <asm/microcode.h>
|
|
#include <asm/kasan.h>
|
|
#include <asm/kasan.h>
|
|
|
|
|
|
-#ifdef CONFIG_X86_5LEVEL
|
|
|
|
-#undef pgtable_l5_enabled
|
|
|
|
-#define pgtable_l5_enabled __pgtable_l5_enabled
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Manage page tables very early on.
|
|
* Manage page tables very early on.
|
|
*/
|
|
*/
|
|
@@ -46,7 +45,6 @@ pmdval_t early_pmd_flags = __PAGE_KERNEL_LARGE & ~(_PAGE_GLOBAL | _PAGE_NX);
|
|
|
|
|
|
#ifdef CONFIG_X86_5LEVEL
|
|
#ifdef CONFIG_X86_5LEVEL
|
|
unsigned int __pgtable_l5_enabled __ro_after_init;
|
|
unsigned int __pgtable_l5_enabled __ro_after_init;
|
|
-EXPORT_SYMBOL(__pgtable_l5_enabled);
|
|
|
|
unsigned int pgdir_shift __ro_after_init = 39;
|
|
unsigned int pgdir_shift __ro_after_init = 39;
|
|
EXPORT_SYMBOL(pgdir_shift);
|
|
EXPORT_SYMBOL(pgdir_shift);
|
|
unsigned int ptrs_per_p4d __ro_after_init = 1;
|
|
unsigned int ptrs_per_p4d __ro_after_init = 1;
|
|
@@ -88,7 +86,7 @@ static bool __head check_la57_support(unsigned long physaddr)
|
|
if (!(native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31))))
|
|
if (!(native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31))))
|
|
return false;
|
|
return false;
|
|
|
|
|
|
- *fixup_int(&pgtable_l5_enabled, physaddr) = 1;
|
|
|
|
|
|
+ *fixup_int(&__pgtable_l5_enabled, physaddr) = 1;
|
|
*fixup_int(&pgdir_shift, physaddr) = 48;
|
|
*fixup_int(&pgdir_shift, physaddr) = 48;
|
|
*fixup_int(&ptrs_per_p4d, physaddr) = 512;
|
|
*fixup_int(&ptrs_per_p4d, physaddr) = 512;
|
|
*fixup_long(&page_offset_base, physaddr) = __PAGE_OFFSET_BASE_L5;
|
|
*fixup_long(&page_offset_base, physaddr) = __PAGE_OFFSET_BASE_L5;
|