]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64/hugetlb: Consistently use pud_sect_supported()
authorAnshuman Khandual <anshuman.khandual@arm.com>
Thu, 20 Feb 2025 05:05:34 +0000 (10:35 +0530)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 5 Mar 2025 18:35:14 +0000 (18:35 +0000)
Let's be consistent in using pud_sect_supported() for PUD_SIZE sized pages.
Hence change hugetlb_mask_last_page() and arch_make_huge_pte() as required.
Also re-arranged the switch statement for a common warning message.

Cc: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
Link: https://lore.kernel.org/r/20250220050534.799645-1-anshuman.khandual@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/mm/hugetlbpage.c

index 98a2a0e64e255864334302372ff4068bd5ec1f97..fd7448bb8c806e4cade5dae24aaf27d8cd975a4d 100644 (file)
@@ -342,7 +342,9 @@ unsigned long hugetlb_mask_last_page(struct hstate *h)
        switch (hp_size) {
 #ifndef __PAGETABLE_PMD_FOLDED
        case PUD_SIZE:
-               return PGDIR_SIZE - PUD_SIZE;
+               if (pud_sect_supported())
+                       return PGDIR_SIZE - PUD_SIZE;
+               break;
 #endif
        case CONT_PMD_SIZE:
                return PUD_SIZE - CONT_PMD_SIZE;
@@ -364,23 +366,21 @@ pte_t arch_make_huge_pte(pte_t entry, unsigned int shift, vm_flags_t flags)
        switch (pagesize) {
 #ifndef __PAGETABLE_PMD_FOLDED
        case PUD_SIZE:
-               entry = pud_pte(pud_mkhuge(pte_pud(entry)));
+               if (pud_sect_supported())
+                       return pud_pte(pud_mkhuge(pte_pud(entry)));
                break;
 #endif
        case CONT_PMD_SIZE:
-               entry = pmd_pte(pmd_mkcont(pte_pmd(entry)));
-               fallthrough;
+               return pmd_pte(pmd_mkhuge(pmd_mkcont(pte_pmd(entry))));
        case PMD_SIZE:
-               entry = pmd_pte(pmd_mkhuge(pte_pmd(entry)));
-               break;
+               return pmd_pte(pmd_mkhuge(pte_pmd(entry)));
        case CONT_PTE_SIZE:
-               entry = pte_mkcont(entry);
-               break;
+               return pte_mkcont(entry);
        default:
-               pr_warn("%s: unrecognized huge page size 0x%lx\n",
-                       __func__, pagesize);
                break;
        }
+       pr_warn("%s: unrecognized huge page size 0x%lx\n",
+               __func__, pagesize);
        return entry;
 }