mm/hugetlb: move page order check inside hugetlb_cma_reserve()
authorAnshuman Khandual <anshuman.khandual@arm.com>
Fri, 9 Feb 2024 05:42:21 +0000 (11:12 +0530)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 22 Feb 2024 18:24:59 +0000 (10:24 -0800)
All platforms could benefit from page order check against MAX_PAGE_ORDER
before allocating a CMA area for gigantic hugetlb pages.  Let's move this
check from individual platforms to generic hugetlb.

Link: https://lkml.kernel.org/r/20240209054221.1403364-1-anshuman.khandual@arm.com
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
Reviewed-by: Jane Chu <jane.chu@oracle.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
arch/arm64/mm/hugetlbpage.c
arch/powerpc/mm/hugetlbpage.c
mm/hugetlb.c

index 8116ac5..6720ec8 100644 (file)
@@ -45,13 +45,6 @@ void __init arm64_hugetlb_cma_reserve(void)
        else
                order = CONT_PMD_SHIFT - PAGE_SHIFT;
 
-       /*
-        * HugeTLB CMA reservation is required for gigantic
-        * huge pages which could not be allocated via the
-        * page allocator. Just warn if there is any change
-        * breaking this assumption.
-        */
-       WARN_ON(order <= MAX_PAGE_ORDER);
        hugetlb_cma_reserve(order);
 }
 #endif /* CONFIG_CMA */
index 0a540b3..16557d0 100644 (file)
@@ -614,8 +614,6 @@ void __init gigantic_hugetlb_cma_reserve(void)
                 */
                order = mmu_psize_to_shift(MMU_PAGE_16G) - PAGE_SHIFT;
 
-       if (order) {
-               VM_WARN_ON(order <= MAX_PAGE_ORDER);
+       if (order)
                hugetlb_cma_reserve(order);
-       }
 }
index 3d651fc..c53a41d 100644 (file)
@@ -7720,6 +7720,13 @@ void __init hugetlb_cma_reserve(int order)
        bool node_specific_cma_alloc = false;
        int nid;
 
+       /*
+        * HugeTLB CMA reservation is required for gigantic
+        * huge pages which could not be allocated via the
+        * page allocator. Just warn if there is any change
+        * breaking this assumption.
+        */
+       VM_WARN_ON(order <= MAX_PAGE_ORDER);
        cma_reserve_called = true;
 
        if (!hugetlb_cma_size)