powerpc/mm/hugetlb/book3s: add _PAGE_PRESENT to hugepd pointer.
authorAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Thu, 20 Sep 2018 18:09:43 +0000 (23:39 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 3 Oct 2018 05:39:58 +0000 (15:39 +1000)
This make hugetlb directory pointer similar to other page able entries. A hugepd
entry is identified by lack of _PAGE_PTE bit set and directory size stored in
HUGEPD_SHIFT_MASK. We update that to also look at _PAGE_PRESENT

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/book3s/64/hash-4k.h
arch/powerpc/include/asm/book3s/64/hugetlb.h
arch/powerpc/mm/hugetlbpage.c

index 9a3798660cefa34a47a1466c03e0aaf21d495749..15bc16b1dc9cf7e90097bfdaea73c9963e2c5a9d 100644 (file)
@@ -66,7 +66,7 @@ static inline int hash__hugepd_ok(hugepd_t hpd)
         * if it is not a pte and have hugepd shift mask
         * set, then it is a hugepd directory pointer
         */
-       if (!(hpdval & _PAGE_PTE) &&
+       if (!(hpdval & _PAGE_PTE) && (hpdval & _PAGE_PRESENT) &&
            ((hpdval & HUGEPD_SHIFT_MASK) != 0))
                return true;
        return false;
index 50888388a3590966d521c71ef75633af4f636c97..5b0177733994eaeb86572b81a8d378b0cd4f1879 100644 (file)
@@ -39,4 +39,7 @@ static inline bool gigantic_page_supported(void)
 }
 #endif
 
+/* hugepd entry valid bit */
+#define HUGEPD_VAL_BITS                (0x8000000000000000UL)
+
 #endif
index e87f9ef9115b41d6a7df4647f5c869f769fc03c0..c6df73c66c407009e49eaee98836ed8586de9da3 100644 (file)
@@ -95,7 +95,7 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
                        break;
                else {
 #ifdef CONFIG_PPC_BOOK3S_64
-                       *hpdp = __hugepd(__pa(new) |
+                       *hpdp = __hugepd(__pa(new) | HUGEPD_VAL_BITS |
                                         (shift_to_mmu_psize(pshift) << 2));
 #elif defined(CONFIG_PPC_8xx)
                        *hpdp = __hugepd(__pa(new) | _PMD_USER |