|
@@ -1131,6 +1131,16 @@ void __init setup_arch(char **cmdline_p)
|
|
|
|
|
|
early_trap_pf_init();
|
|
|
|
|
|
+ /*
|
|
|
+ * Update mmu_cr4_features (and, indirectly, trampoline_cr4_features)
|
|
|
+ * with the current CR4 value. This may not be necessary, but
|
|
|
+ * auditing all the early-boot CR4 manipulation would be needed to
|
|
|
+ * rule it out.
|
|
|
+ */
|
|
|
+ if (boot_cpu_data.cpuid_level >= 0)
|
|
|
+ /* A CPU has %cr4 if and only if it has CPUID. */
|
|
|
+ mmu_cr4_features = __read_cr4();
|
|
|
+
|
|
|
setup_real_mode();
|
|
|
|
|
|
memblock_set_current_limit(get_max_mapped());
|
|
@@ -1180,13 +1190,6 @@ void __init setup_arch(char **cmdline_p)
|
|
|
|
|
|
kasan_init();
|
|
|
|
|
|
- if (boot_cpu_data.cpuid_level >= 0) {
|
|
|
- /* A CPU has %cr4 if and only if it has CPUID */
|
|
|
- mmu_cr4_features = __read_cr4();
|
|
|
- if (trampoline_cr4_features)
|
|
|
- *trampoline_cr4_features = mmu_cr4_features;
|
|
|
- }
|
|
|
-
|
|
|
#ifdef CONFIG_X86_32
|
|
|
/* sync back kernel address range */
|
|
|
clone_pgd_range(initial_page_table + KERNEL_PGD_BOUNDARY,
|