arm64/mm: Redefine CONT_{PTE, PMD}_SHIFT
authorGavin Shan <gshan@redhat.com>
Tue, 30 Jun 2020 06:24:28 +0000 (16:24 +1000)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 3 Jul 2020 16:49:58 +0000 (17:49 +0100)
Currently, the value of CONT_{PTE, PMD}_SHIFT is off from standard
{PAGE, PMD}_SHIFT. In turn, we have to consider adding {PAGE, PMD}_SHIFT
when using CONT_{PTE, PMD}_SHIFT in the function hugetlbpage_init().
It's a bit confusing.

This redefines CONT_{PTE, PMD}_SHIFT with {PAGE, PMD}_SHIFT included
so that the later values needn't be added when using the former ones
in function hugetlbpage_init(). Note that the values of CONT_{PTES, PMDS}
are unchanged.

Suggested-by: Will Deacon <will@kernel.org>
Signed-off-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Link: https://lkml.org/lkml/2020/5/6/190
Link: https://lore.kernel.org/r/20200630062428.194235-1-gshan@redhat.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/pgtable-hwdef.h
arch/arm64/mm/hugetlbpage.c

index 9c91a8f..ce3d14a 100644 (file)
  * Contiguous page definitions.
  */
 #ifdef CONFIG_ARM64_64K_PAGES
-#define CONT_PTE_SHIFT         5
-#define CONT_PMD_SHIFT         5
+#define CONT_PTE_SHIFT         (5 + PAGE_SHIFT)
+#define CONT_PMD_SHIFT         (5 + PMD_SHIFT)
 #elif defined(CONFIG_ARM64_16K_PAGES)
-#define CONT_PTE_SHIFT         7
-#define CONT_PMD_SHIFT         5
+#define CONT_PTE_SHIFT         (7 + PAGE_SHIFT)
+#define CONT_PMD_SHIFT         (5 + PMD_SHIFT)
 #else
-#define CONT_PTE_SHIFT         4
-#define CONT_PMD_SHIFT         4
+#define CONT_PTE_SHIFT         (4 + PAGE_SHIFT)
+#define CONT_PMD_SHIFT         (4 + PMD_SHIFT)
 #endif
 
-#define CONT_PTES              (1 << CONT_PTE_SHIFT)
+#define CONT_PTES              (1 << (CONT_PTE_SHIFT - PAGE_SHIFT))
 #define CONT_PTE_SIZE          (CONT_PTES * PAGE_SIZE)
 #define CONT_PTE_MASK          (~(CONT_PTE_SIZE - 1))
-#define CONT_PMDS              (1 << CONT_PMD_SHIFT)
+#define CONT_PMDS              (1 << (CONT_PMD_SHIFT - PMD_SHIFT))
 #define CONT_PMD_SIZE          (CONT_PMDS * PMD_SIZE)
 #define CONT_PMD_MASK          (~(CONT_PMD_SIZE - 1))
 /* the the numerical offset of the PTE within a range of CONT_PTES */
index 0a52ce4..c790847 100644 (file)
@@ -457,9 +457,9 @@ static int __init hugetlbpage_init(void)
 #ifdef CONFIG_ARM64_4K_PAGES
        hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
 #endif
-       hugetlb_add_hstate((CONT_PMD_SHIFT + PMD_SHIFT) - PAGE_SHIFT);
+       hugetlb_add_hstate(CONT_PMD_SHIFT - PAGE_SHIFT);
        hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT);
-       hugetlb_add_hstate((CONT_PTE_SHIFT + PAGE_SHIFT) - PAGE_SHIFT);
+       hugetlb_add_hstate(CONT_PTE_SHIFT - PAGE_SHIFT);
 
        return 0;
 }