X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fi386%2Fmm%2Fhugetlbpage.c;h=171fc925e1e4e7c699c6222b229914b320c987c3;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=647f84a8ef0bf90be0c29e0812554a65120a8507;hpb=e3f6fb6212a7102bdb56ba38fa1e98fe72950475;p=linux-2.6.git diff --git a/arch/i386/mm/hugetlbpage.c b/arch/i386/mm/hugetlbpage.c index 647f84a8e..171fc925e 100644 --- a/arch/i386/mm/hugetlbpage.c +++ b/arch/i386/mm/hugetlbpage.c @@ -46,7 +46,7 @@ static void set_huge_pte(struct mm_struct *mm, struct vm_area_struct *vma, struc { pte_t entry; - vx_rsspages_add(mm, HPAGE_SIZE / PAGE_SIZE); + add_mm_counter(mm, rss, HPAGE_SIZE / PAGE_SIZE); if (write_access) { entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot))); @@ -86,7 +86,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, ptepage = pte_page(entry); get_page(ptepage); set_pte(dst_pte, entry); - vx_rsspages_add(dst, HPAGE_SIZE / PAGE_SIZE); + add_mm_counter(dst, rss, HPAGE_SIZE / PAGE_SIZE); addr += HPAGE_SIZE; } return 0; @@ -209,20 +209,23 @@ void unmap_hugepage_range(struct vm_area_struct *vma, { struct mm_struct *mm = vma->vm_mm; unsigned long address; - pte_t pte; + pte_t pte, *ptep; struct page *page; BUG_ON(start & (HPAGE_SIZE - 1)); BUG_ON(end & (HPAGE_SIZE - 1)); for (address = start; address < end; address += HPAGE_SIZE) { - pte = ptep_get_and_clear(huge_pte_offset(mm, address)); + ptep = huge_pte_offset(mm, address); + if (!ptep) + continue; + pte = ptep_get_and_clear(mm, address, ptep); if (pte_none(pte)) continue; page = pte_page(pte); put_page(page); } - vx_rsspages_sub(mm, (end - start) >> PAGE_SHIFT); + add_mm_counter(mm ,rss, -((end - start) >> PAGE_SHIFT)); flush_tlb_range(vma, start, end); } @@ -246,15 +249,8 @@ int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma) goto out; } - if (!pte_none(*pte)) { - pmd_t *pmd = (pmd_t *) pte; - - page = pmd_page(*pmd); - pmd_clear(pmd); - mm->nr_ptes--; - dec_page_state(nr_page_table_pages); - page_cache_release(page); - } + if (!pte_none(*pte)) + continue; idx = ((addr - vma->vm_start) >> HPAGE_SHIFT) + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));