]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/mm: Preallocate all PAE page tables
authorDave Hansen <dave.hansen@linux.intel.com>
Mon, 14 Apr 2025 17:32:41 +0000 (10:32 -0700)
committerDave Hansen <dave.hansen@linux.intel.com>
Thu, 17 Apr 2025 17:39:25 +0000 (10:39 -0700)
Finally, move away from having PAE kernels share any PMDs across
processes.

This was already the default on PTI kernels which are  the common
case.

Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Link: https://lore.kernel.org/all/20250414173241.1288CAB4%40davehans-spike.ostc.intel.com
arch/x86/mm/pgtable.c

index ca07db510d26d4cca11e4c8a75a5c2f49ae0b582..f4fa8fabf326b952a159119165ef47066626093e 100644 (file)
@@ -80,16 +80,11 @@ struct mm_struct *pgd_page_get_mm(struct page *page)
 
 static void pgd_ctor(struct mm_struct *mm, pgd_t *pgd)
 {
-       /* If the pgd points to a shared pagetable level (either the
-          ptes in non-PAE, or shared PMD in PAE), then just copy the
-          references from swapper_pg_dir. */
-       if (CONFIG_PGTABLE_LEVELS == 2 ||
-           (CONFIG_PGTABLE_LEVELS == 3 && SHARED_KERNEL_PMD) ||
-           CONFIG_PGTABLE_LEVELS >= 4) {
+       /* PAE preallocates all its PMDs.  No cloning needed. */
+       if (!IS_ENABLED(CONFIG_X86_PAE))
                clone_pgd_range(pgd + KERNEL_PGD_BOUNDARY,
                                swapper_pg_dir + KERNEL_PGD_BOUNDARY,
                                KERNEL_PGD_PTRS);
-       }
 
        /* List used to sync kernel mapping updates */
        pgd_set_mm(pgd, mm);
@@ -122,8 +117,7 @@ static void pgd_dtor(pgd_t *pgd)
  * all 4 top-level entries are used almost immediately in a
  * new process's life, we just pre-populate them here.
  */
-#define PREALLOCATED_PMDS      (static_cpu_has(X86_FEATURE_PTI) ? \
-                                       PTRS_PER_PGD : KERNEL_PGD_BOUNDARY)
+#define PREALLOCATED_PMDS      PTRS_PER_PGD
 #define MAX_PREALLOCATED_PMDS  PTRS_PER_PGD
 
 /*