|
@@ -88,12 +88,7 @@ static int __init nonx32_setup(char *str)
|
|
|
}
|
|
|
__setup("noexec32=", nonx32_setup);
|
|
|
|
|
|
-/*
|
|
|
- * When memory was added make sure all the processes MM have
|
|
|
- * suitable PGD entries in the local PGD level page.
|
|
|
- */
|
|
|
-#ifdef CONFIG_X86_5LEVEL
|
|
|
-void sync_global_pgds(unsigned long start, unsigned long end)
|
|
|
+static void sync_global_pgds_l5(unsigned long start, unsigned long end)
|
|
|
{
|
|
|
unsigned long addr;
|
|
|
|
|
@@ -129,8 +124,8 @@ void sync_global_pgds(unsigned long start, unsigned long end)
|
|
|
spin_unlock(&pgd_lock);
|
|
|
}
|
|
|
}
|
|
|
-#else
|
|
|
-void sync_global_pgds(unsigned long start, unsigned long end)
|
|
|
+
|
|
|
+static void sync_global_pgds_l4(unsigned long start, unsigned long end)
|
|
|
{
|
|
|
unsigned long addr;
|
|
|
|
|
@@ -173,7 +168,18 @@ void sync_global_pgds(unsigned long start, unsigned long end)
|
|
|
spin_unlock(&pgd_lock);
|
|
|
}
|
|
|
}
|
|
|
-#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * When memory was added make sure all the processes MM have
|
|
|
+ * suitable PGD entries in the local PGD level page.
|
|
|
+ */
|
|
|
+void sync_global_pgds(unsigned long start, unsigned long end)
|
|
|
+{
|
|
|
+ if (pgtable_l5_enabled)
|
|
|
+ sync_global_pgds_l5(start, end);
|
|
|
+ else
|
|
|
+ sync_global_pgds_l4(start, end);
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
* NOTE: This function is marked __ref because it calls __init function
|
|
@@ -632,7 +638,7 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, unsigned long paddr_end,
|
|
|
unsigned long vaddr = (unsigned long)__va(paddr);
|
|
|
int i = p4d_index(vaddr);
|
|
|
|
|
|
- if (!IS_ENABLED(CONFIG_X86_5LEVEL))
|
|
|
+ if (!pgtable_l5_enabled)
|
|
|
return phys_pud_init((pud_t *) p4d_page, paddr, paddr_end, page_size_mask);
|
|
|
|
|
|
for (; i < PTRS_PER_P4D; i++, paddr = paddr_next) {
|
|
@@ -712,7 +718,7 @@ kernel_physical_mapping_init(unsigned long paddr_start,
|
|
|
page_size_mask);
|
|
|
|
|
|
spin_lock(&init_mm.page_table_lock);
|
|
|
- if (IS_ENABLED(CONFIG_X86_5LEVEL))
|
|
|
+ if (pgtable_l5_enabled)
|
|
|
pgd_populate(&init_mm, pgd, p4d);
|
|
|
else
|
|
|
p4d_populate(&init_mm, p4d_offset(pgd, vaddr), (pud_t *) p4d);
|
|
@@ -1093,7 +1099,7 @@ remove_p4d_table(p4d_t *p4d_start, unsigned long addr, unsigned long end,
|
|
|
* 5-level case we should free them. This code will have to change
|
|
|
* to adapt for boot-time switching between 4 and 5 level page tables.
|
|
|
*/
|
|
|
- if (CONFIG_PGTABLE_LEVELS == 5)
|
|
|
+ if (pgtable_l5_enabled)
|
|
|
free_pud_table(pud_base, p4d, altmap);
|
|
|
}
|
|
|
|