OSDN Git Service

arm64/mm: Compute PTRS_PER_[PMD|PUD] independently of PTRS_PER_PTE
authorAnshuman Khandual <anshuman.khandual@arm.com>
Fri, 8 Apr 2022 04:10:09 +0000 (09:40 +0530)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 22 Apr 2022 13:45:58 +0000 (14:45 +0100)
Possible page table entries (or pointers) on non-zero page table levels are
dependent on a single page size i.e PAGE_SIZE and size required for each
individual page table entry i.e 8 bytes. PTRS_PER_[PMD|PUD] as such are not
related to PTRS_PER_PTE in any manner, as being implied currently. So lets
just make this very explicit and compute these macros independently.

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>
Link: https://lore.kernel.org/r/20220408041009.1259701-1-anshuman.khandual@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/pgtable-hwdef.h

index 66671ff..dd3d12b 100644 (file)
@@ -49,7 +49,7 @@
 #define PMD_SHIFT              ARM64_HW_PGTABLE_LEVEL_SHIFT(2)
 #define PMD_SIZE               (_AC(1, UL) << PMD_SHIFT)
 #define PMD_MASK               (~(PMD_SIZE-1))
-#define PTRS_PER_PMD           PTRS_PER_PTE
+#define PTRS_PER_PMD           (1 << (PAGE_SHIFT - 3))
 #endif
 
 /*
@@ -59,7 +59,7 @@
 #define PUD_SHIFT              ARM64_HW_PGTABLE_LEVEL_SHIFT(1)
 #define PUD_SIZE               (_AC(1, UL) << PUD_SHIFT)
 #define PUD_MASK               (~(PUD_SIZE-1))
-#define PTRS_PER_PUD           PTRS_PER_PTE
+#define PTRS_PER_PUD           (1 << (PAGE_SHIFT - 3))
 #endif
 
 /*