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>
         * 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;
 
 }
 #endif
 
+/* hugepd entry valid bit */
+#define HUGEPD_VAL_BITS                (0x8000000000000000UL)
+
 #endif
 
                        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 |