powerpc/mm: Introduce _PAGE_LARGE software pte bits
[linux-2.6-block.git] / arch / powerpc / include / asm / book3s / 64 / hugetlb.h
index d9c283f95e051d2cf261c8ca5ae6356352449e9d..c62f14d0bec191e75bd1710020485324173b60ac 100644 (file)
@@ -30,4 +30,24 @@ static inline int hstate_get_psize(struct hstate *hstate)
                return mmu_virtual_psize;
        }
 }
+
+#define arch_make_huge_pte arch_make_huge_pte
+static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma,
+                                      struct page *page, int writable)
+{
+       unsigned long page_shift;
+
+       if (!cpu_has_feature(CPU_FTR_POWER9_DD1))
+               return entry;
+
+       page_shift = huge_page_shift(hstate_vma(vma));
+       /*
+        * We don't support 1G hugetlb pages yet.
+        */
+       VM_WARN_ON(page_shift == mmu_psize_defs[MMU_PAGE_1G].shift);
+       if (page_shift == mmu_psize_defs[MMU_PAGE_2M].shift)
+               return __pte(pte_val(entry) | _PAGE_LARGE);
+       else
+               return entry;
+}
 #endif