aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/hugetlbpage.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/mm/hugetlbpage.c')
-rw-r--r--arch/x86/mm/hugetlbpage.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
index 52476fde8996..a4789e87a315 100644
--- a/arch/x86/mm/hugetlbpage.c
+++ b/arch/x86/mm/hugetlbpage.c
@@ -189,6 +189,11 @@ int pmd_huge(pmd_t pmd)
189 return 0; 189 return 0;
190} 190}
191 191
192int pud_huge(pud_t pud)
193{
194 return 0;
195}
196
192struct page * 197struct page *
193follow_huge_pmd(struct mm_struct *mm, unsigned long address, 198follow_huge_pmd(struct mm_struct *mm, unsigned long address,
194 pmd_t *pmd, int write) 199 pmd_t *pmd, int write)
@@ -209,6 +214,11 @@ int pmd_huge(pmd_t pmd)
209 return !!(pmd_val(pmd) & _PAGE_PSE); 214 return !!(pmd_val(pmd) & _PAGE_PSE);
210} 215}
211 216
217int pud_huge(pud_t pud)
218{
219 return 0;
220}
221
212struct page * 222struct page *
213follow_huge_pmd(struct mm_struct *mm, unsigned long address, 223follow_huge_pmd(struct mm_struct *mm, unsigned long address,
214 pmd_t *pmd, int write) 224 pmd_t *pmd, int write)
@@ -217,9 +227,22 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,
217 227
218 page = pte_page(*(pte_t *)pmd); 228 page = pte_page(*(pte_t *)pmd);
219 if (page) 229 if (page)
220 page += ((address & ~HPAGE_MASK) >> PAGE_SHIFT); 230 page += ((address & ~PMD_MASK) >> PAGE_SHIFT);
221 return page; 231 return page;
222} 232}
233
234struct page *
235follow_huge_pud(struct mm_struct *mm, unsigned long address,
236 pud_t *pud, int write)
237{
238 struct page *page;
239
240 page = pte_page(*(pte_t *)pud);
241 if (page)
242 page += ((address & ~PUD_MASK) >> PAGE_SHIFT);
243 return page;
244}
245
223#endif 246#endif
224 247
225/* x86_64 also uses this file */ 248/* x86_64 also uses this file */