summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAdam Litke <agl@us.ibm.com>2005-09-04 02:55:01 +0400
committerLinus Torvalds <torvalds@evo.osdl.org>2005-09-05 11:05:46 +0400
commit02b0ccef903e85673ead74ddb7c431f2f7ce183d (patch)
treed359d49ef24f94a413e7dec69821645b42813921 /arch
parent7bf07f3d4b4358aa6d99a26d7a0165f1e91c3fcc (diff)
downloadlinux-02b0ccef903e85673ead74ddb7c431f2f7ce183d.tar.xz
[PATCH] hugetlb: check p?d_present in huge_pte_offset()
For demand faulting, we cannot assume that the page tables will be populated. Do what the rest of the architectures do and test p?d_present() while walking down the page table. Signed-off-by: Adam Litke <agl@us.ibm.com> Cc: <linux-mm@kvack.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/i386/mm/hugetlbpage.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/i386/mm/hugetlbpage.c b/arch/i386/mm/hugetlbpage.c
index 57c486f0e896..24c8a536b588 100644
--- a/arch/i386/mm/hugetlbpage.c
+++ b/arch/i386/mm/hugetlbpage.c
@@ -46,8 +46,11 @@ pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
pmd_t *pmd = NULL;
pgd = pgd_offset(mm, addr);
- pud = pud_offset(pgd, addr);
- pmd = pmd_offset(pud, addr);
+ if (pgd_present(*pgd)) {
+ pud = pud_offset(pgd, addr);
+ if (pud_present(*pud))
+ pmd = pmd_offset(pud, addr);
+ }
return (pte_t *) pmd;
}