aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm/hugetlbpage-hash64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/mm/hugetlbpage-hash64.c')
-rw-r--r--arch/powerpc/mm/hugetlbpage-hash64.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/powerpc/mm/hugetlbpage-hash64.c b/arch/powerpc/mm/hugetlbpage-hash64.c
index 2e6a8f9345d3..367ce3a4a503 100644
--- a/arch/powerpc/mm/hugetlbpage-hash64.c
+++ b/arch/powerpc/mm/hugetlbpage-hash64.c
@@ -121,3 +121,28 @@ int __hash_page_huge(unsigned long ea, unsigned long access, unsigned long vsid,
121 *ptep = __pte(new_pte & ~H_PAGE_BUSY); 121 *ptep = __pte(new_pte & ~H_PAGE_BUSY);
122 return 0; 122 return 0;
123} 123}
124
125pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma,
126 unsigned long addr, pte_t *ptep)
127{
128 unsigned long pte_val;
129 /*
130 * Clear the _PAGE_PRESENT so that no hardware parallel update is
131 * possible. Also keep the pte_present true so that we don't take
132 * wrong fault.
133 */
134 pte_val = pte_update(vma->vm_mm, addr, ptep,
135 _PAGE_PRESENT, _PAGE_INVALID, 1);
136
137 return __pte(pte_val);
138}
139
140void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr,
141 pte_t *ptep, pte_t old_pte, pte_t pte)
142{
143
144 if (radix_enabled())
145 return radix__huge_ptep_modify_prot_commit(vma, addr, ptep,
146 old_pte, pte);
147 set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
148}