From 4d0ca8a05391576509c75ac8839b740e02944b9a Mon Sep 17 00:00:00 2001 From: Adam Litke Date: Sat, 3 Sep 2005 15:55:00 -0700 Subject: [PATCH] --- yaml --- r: 6875 b: refs/heads/master c: 7bf07f3d4b4358aa6d99a26d7a0165f1e91c3fcc h: refs/heads/master i: 6873: 0d3e91446d048f0dd47fcbafd058f2dbd1de9f5e 6871: f23f2073708d10a196a7300ea8323f99f7973a4e v: v3 --- [refs] | 2 +- trunk/arch/i386/mm/hugetlbpage.c | 13 +++++++++++-- trunk/mm/hugetlb.c | 2 -- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index c87760c07b82..050700ed77dc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 32e51a8c976fc72c3e9bcece9767d9908816bf8e +refs/heads/master: 7bf07f3d4b4358aa6d99a26d7a0165f1e91c3fcc diff --git a/trunk/arch/i386/mm/hugetlbpage.c b/trunk/arch/i386/mm/hugetlbpage.c index 3b099f32b948..57c486f0e896 100644 --- a/trunk/arch/i386/mm/hugetlbpage.c +++ b/trunk/arch/i386/mm/hugetlbpage.c @@ -22,12 +22,21 @@ pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr) { pgd_t *pgd; pud_t *pud; - pmd_t *pmd = NULL; + pmd_t *pmd; + pte_t *pte = NULL; pgd = pgd_offset(mm, addr); pud = pud_alloc(mm, pgd, addr); pmd = pmd_alloc(mm, pud, addr); - return (pte_t *) pmd; + + if (!pmd) + goto out; + + pte = (pte_t *) pmd; + if (!pte_none(*pte) && !pte_huge(*pte)) + hugetlb_clean_stale_pgtable(pte); +out: + return pte; } pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr) diff --git a/trunk/mm/hugetlb.c b/trunk/mm/hugetlb.c index 6bf720bc662c..901ac523a1c3 100644 --- a/trunk/mm/hugetlb.c +++ b/trunk/mm/hugetlb.c @@ -360,8 +360,6 @@ int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma) ret = -ENOMEM; goto out; } - if (! pte_none(*pte)) - hugetlb_clean_stale_pgtable(pte); idx = ((addr - vma->vm_start) >> HPAGE_SHIFT) + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));