| From 2e5809a4ddb15969503e43b06662a9a725f613ea Mon Sep 17 00:00:00 2001 |
| From: Mike Kravetz <mike.kravetz@oracle.com> |
| Date: Tue, 5 Oct 2021 13:25:29 -0700 |
| Subject: arm64/hugetlb: fix CMA gigantic page order for non-4K PAGE_SIZE |
| |
| From: Mike Kravetz <mike.kravetz@oracle.com> |
| |
| commit 2e5809a4ddb15969503e43b06662a9a725f613ea upstream. |
| |
| For non-4K PAGE_SIZE configs, the largest gigantic huge page size is |
| CONT_PMD_SHIFT order. On arm64 with 64K PAGE_SIZE, the gigantic page is |
| 16G. Therefore, one should be able to specify 'hugetlb_cma=16G' on the |
| kernel command line so that one gigantic page can be allocated from CMA. |
| However, when adding such an option the following message is produced: |
| |
| hugetlb_cma: cma area should be at least 8796093022208 MiB |
| |
| This is because the calculation for non-4K gigantic page order is |
| incorrect in the arm64 specific routine arm64_hugetlb_cma_reserve(). |
| |
| Fixes: abb7962adc80 ("arm64/hugetlb: Reserve CMA areas for gigantic pages on 16K and 64K configs") |
| Cc: <stable@vger.kernel.org> # 5.9.x |
| Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> |
| Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> |
| Link: https://lore.kernel.org/r/20211005202529.213812-1-mike.kravetz@oracle.com |
| Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/arm64/mm/hugetlbpage.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/arm64/mm/hugetlbpage.c |
| +++ b/arch/arm64/mm/hugetlbpage.c |
| @@ -43,7 +43,7 @@ void __init arm64_hugetlb_cma_reserve(vo |
| #ifdef CONFIG_ARM64_4K_PAGES |
| order = PUD_SHIFT - PAGE_SHIFT; |
| #else |
| - order = CONT_PMD_SHIFT + PMD_SHIFT - PAGE_SHIFT; |
| + order = CONT_PMD_SHIFT - PAGE_SHIFT; |
| #endif |
| /* |
| * HugeTLB CMA reservation is required for gigantic |