diff options
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 9cc773483624..abfbe8ca3323 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -2790,6 +2790,12 @@ void hugetlb_show_meminfo(void) | |||
2790 | 1UL << (huge_page_order(h) + PAGE_SHIFT - 10)); | 2790 | 1UL << (huge_page_order(h) + PAGE_SHIFT - 10)); |
2791 | } | 2791 | } |
2792 | 2792 | ||
2793 | void hugetlb_report_usage(struct seq_file *m, struct mm_struct *mm) | ||
2794 | { | ||
2795 | seq_printf(m, "HugetlbPages:\t%8lu kB\n", | ||
2796 | atomic_long_read(&mm->hugetlb_usage) << (PAGE_SHIFT - 10)); | ||
2797 | } | ||
2798 | |||
2793 | /* Return the number pages of memory we physically have, in PAGE_SIZE units. */ | 2799 | /* Return the number pages of memory we physically have, in PAGE_SIZE units. */ |
2794 | unsigned long hugetlb_total_pages(void) | 2800 | unsigned long hugetlb_total_pages(void) |
2795 | { | 2801 | { |
@@ -3025,6 +3031,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, | |||
3025 | get_page(ptepage); | 3031 | get_page(ptepage); |
3026 | page_dup_rmap(ptepage); | 3032 | page_dup_rmap(ptepage); |
3027 | set_huge_pte_at(dst, addr, dst_pte, entry); | 3033 | set_huge_pte_at(dst, addr, dst_pte, entry); |
3034 | hugetlb_count_add(pages_per_huge_page(h), dst); | ||
3028 | } | 3035 | } |
3029 | spin_unlock(src_ptl); | 3036 | spin_unlock(src_ptl); |
3030 | spin_unlock(dst_ptl); | 3037 | spin_unlock(dst_ptl); |
@@ -3105,6 +3112,7 @@ again: | |||
3105 | if (huge_pte_dirty(pte)) | 3112 | if (huge_pte_dirty(pte)) |
3106 | set_page_dirty(page); | 3113 | set_page_dirty(page); |
3107 | 3114 | ||
3115 | hugetlb_count_sub(pages_per_huge_page(h), mm); | ||
3108 | page_remove_rmap(page); | 3116 | page_remove_rmap(page); |
3109 | force_flush = !__tlb_remove_page(tlb, page); | 3117 | force_flush = !__tlb_remove_page(tlb, page); |
3110 | if (force_flush) { | 3118 | if (force_flush) { |
@@ -3509,6 +3517,7 @@ retry: | |||
3509 | && (vma->vm_flags & VM_SHARED))); | 3517 | && (vma->vm_flags & VM_SHARED))); |
3510 | set_huge_pte_at(mm, address, ptep, new_pte); | 3518 | set_huge_pte_at(mm, address, ptep, new_pte); |
3511 | 3519 | ||
3520 | hugetlb_count_add(pages_per_huge_page(h), mm); | ||
3512 | if ((flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) { | 3521 | if ((flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) { |
3513 | /* Optimization, do the COW without a second fault */ | 3522 | /* Optimization, do the COW without a second fault */ |
3514 | ret = hugetlb_cow(mm, vma, address, ptep, new_pte, page, ptl); | 3523 | ret = hugetlb_cow(mm, vma, address, ptep, new_pte, page, ptl); |