diff options
Diffstat (limited to 'arch/powerpc/mm/hugetlbpage-hash64.c')
-rw-r--r-- | arch/powerpc/mm/hugetlbpage-hash64.c | 25 |
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 | |||
125 | pte_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 | |||
140 | void 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 | } | ||