x86/decompressor: Assign paging related global variables earlier
There is no need to defer the assignment of the paging related global variables 'pgdir_shift' and 'ptrs_per_p4d' until after the trampoline is cleaned up, so assign them as soon as it is clear that 5-level paging will be enabled. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20230807162720.545787-9-ardb@kernel.org
This commit is contained in:
parent
8b63cba746
commit
00c6b0978e
@ -179,9 +179,7 @@ static inline int count_immovable_mem_regions(void) { return 0; }
|
||||
#endif
|
||||
|
||||
/* ident_map_64.c */
|
||||
#ifdef CONFIG_X86_5LEVEL
|
||||
extern unsigned int __pgtable_l5_enabled, pgdir_shift, ptrs_per_p4d;
|
||||
#endif
|
||||
extern void kernel_add_identity_map(unsigned long start, unsigned long end);
|
||||
|
||||
/* Used by PAGE_KERN* macros: */
|
||||
|
@ -130,6 +130,11 @@ struct paging_config paging_prepare(void *rmode)
|
||||
native_cpuid_eax(0) >= 7 &&
|
||||
(native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31)))) {
|
||||
paging_config.l5_required = 1;
|
||||
|
||||
/* Initialize variables for 5-level paging */
|
||||
__pgtable_l5_enabled = 1;
|
||||
pgdir_shift = 48;
|
||||
ptrs_per_p4d = 512;
|
||||
}
|
||||
|
||||
paging_config.trampoline_start = find_trampoline_placement();
|
||||
@ -206,13 +211,4 @@ void cleanup_trampoline(void *pgtable)
|
||||
|
||||
/* Restore trampoline memory */
|
||||
memcpy(trampoline_32bit, trampoline_save, TRAMPOLINE_32BIT_SIZE);
|
||||
|
||||
/* Initialize variables for 5-level paging */
|
||||
#ifdef CONFIG_X86_5LEVEL
|
||||
if (__read_cr4() & X86_CR4_LA57) {
|
||||
__pgtable_l5_enabled = 1;
|
||||
pgdir_shift = 48;
|
||||
ptrs_per_p4d = 512;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user