aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2008-07-24 00:27:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-07-24 13:47:18 -0400
commitceb868796181dc95ea01a110e123afd391639873 (patch)
tree991be618e5195b05c31974a19adb4b9602315013 /arch
parent4abd32dbab201c3ced0b0af12accea77cd9eeffc (diff)
hugetlb: introduce pud_huge
Straight forward extensions for huge pages located in the PUD instead of PMDs. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Nick Piggin <npiggin@suse.de> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/mm/hugetlbpage.c6
-rw-r--r--arch/powerpc/mm/hugetlbpage.c5
-rw-r--r--arch/s390/mm/hugetlbpage.c5
-rw-r--r--arch/sh/mm/hugetlbpage.c5
-rw-r--r--arch/sparc64/mm/hugetlbpage.c5
-rw-r--r--arch/x86/mm/hugetlbpage.c25
6 files changed, 50 insertions, 1 deletions
diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
index 6170f097d255..c45fc7f5a979 100644
--- a/arch/ia64/mm/hugetlbpage.c
+++ b/arch/ia64/mm/hugetlbpage.c
@@ -107,6 +107,12 @@ int pmd_huge(pmd_t pmd)
107{ 107{
108 return 0; 108 return 0;
109} 109}
110
111int pud_huge(pud_t pud)
112{
113 return 0;
114}
115
110struct page * 116struct page *
111follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int write) 117follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int write)
112{ 118{
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index c94dc71af989..63db7adce717 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -369,6 +369,11 @@ int pmd_huge(pmd_t pmd)
369 return 0; 369 return 0;
370} 370}
371 371
372int pud_huge(pud_t pud)
373{
374 return 0;
375}
376
372struct page * 377struct page *
373follow_huge_pmd(struct mm_struct *mm, unsigned long address, 378follow_huge_pmd(struct mm_struct *mm, unsigned long address,
374 pmd_t *pmd, int write) 379 pmd_t *pmd, int write)
diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
index 9162dc84f77f..f28c43d2f61d 100644
--- a/arch/s390/mm/hugetlbpage.c
+++ b/arch/s390/mm/hugetlbpage.c
@@ -120,6 +120,11 @@ int pmd_huge(pmd_t pmd)
120 return !!(pmd_val(pmd) & _SEGMENT_ENTRY_LARGE); 120 return !!(pmd_val(pmd) & _SEGMENT_ENTRY_LARGE);
121} 121}
122 122
123int pud_huge(pud_t pud)
124{
125 return 0;
126}
127
123struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 128struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
124 pmd_t *pmdp, int write) 129 pmd_t *pmdp, int write)
125{ 130{
diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
index 2f9dbe0ef4ac..9304117039c4 100644
--- a/arch/sh/mm/hugetlbpage.c
+++ b/arch/sh/mm/hugetlbpage.c
@@ -79,6 +79,11 @@ int pmd_huge(pmd_t pmd)
79 return 0; 79 return 0;
80} 80}
81 81
82int pud_huge(pud_t pud)
83{
84 return 0;
85}
86
82struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 87struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
83 pmd_t *pmd, int write) 88 pmd_t *pmd, int write)
84{ 89{
diff --git a/arch/sparc64/mm/hugetlbpage.c b/arch/sparc64/mm/hugetlbpage.c
index 1307b23f6a76..f27d10369e0c 100644
--- a/arch/sparc64/mm/hugetlbpage.c
+++ b/arch/sparc64/mm/hugetlbpage.c
@@ -295,6 +295,11 @@ int pmd_huge(pmd_t pmd)
295 return 0; 295 return 0;
296} 296}
297 297
298int pud_huge(pud_t pud)
299{
300 return 0;
301}
302
298struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 303struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
299 pmd_t *pmd, int write) 304 pmd_t *pmd, int write)
300{ 305{
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 */