diff options
author | Dave Hansen <dave@linux.vnet.ibm.com> | 2011-03-22 19:32:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-22 20:44:04 -0400 |
commit | 3c9acc7849b1eab7ffc75e933404c5f32865d9a2 (patch) | |
tree | 7137eca693cd83bf89d30b354665ec9cf7b5f431 | |
parent | ae11c4d9f646064cf086e2f8cd4b3c475df7739c (diff) |
smaps: pass pte size argument in to smaps_pte_entry()
Add an argument to the new smaps_pte_entry() function to let it account in
things other than PAGE_SIZE units. I changed all of the PAGE_SIZE sites,
even though not all of them can be reached for transparent huge pages,
just so this will continue to work without changes as THPs are improved.
Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
Acked-by: Mel Gorman <mel@csn.ul.ie>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: David Rientjes <rientjes@google.com>
Reviewed-by: Eric B Munson <emunson@mgebm.net>
Tested-by: Eric B Munson <emunson@mgebm.net>
Cc: Michael J Wolf <mjwolf@us.ibm.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Matt Mackall <mpm@selenic.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/proc/task_mmu.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 5cd06fa3106b..d7e2af334076 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
@@ -335,7 +335,7 @@ struct mem_size_stats { | |||
335 | 335 | ||
336 | 336 | ||
337 | static void smaps_pte_entry(pte_t ptent, unsigned long addr, | 337 | static void smaps_pte_entry(pte_t ptent, unsigned long addr, |
338 | struct mm_walk *walk) | 338 | unsigned long ptent_size, struct mm_walk *walk) |
339 | { | 339 | { |
340 | struct mem_size_stats *mss = walk->private; | 340 | struct mem_size_stats *mss = walk->private; |
341 | struct vm_area_struct *vma = mss->vma; | 341 | struct vm_area_struct *vma = mss->vma; |
@@ -343,7 +343,7 @@ static void smaps_pte_entry(pte_t ptent, unsigned long addr, | |||
343 | int mapcount; | 343 | int mapcount; |
344 | 344 | ||
345 | if (is_swap_pte(ptent)) { | 345 | if (is_swap_pte(ptent)) { |
346 | mss->swap += PAGE_SIZE; | 346 | mss->swap += ptent_size; |
347 | return; | 347 | return; |
348 | } | 348 | } |
349 | 349 | ||
@@ -355,25 +355,25 @@ static void smaps_pte_entry(pte_t ptent, unsigned long addr, | |||
355 | return; | 355 | return; |
356 | 356 | ||
357 | if (PageAnon(page)) | 357 | if (PageAnon(page)) |
358 | mss->anonymous += PAGE_SIZE; | 358 | mss->anonymous += ptent_size; |
359 | 359 | ||
360 | mss->resident += PAGE_SIZE; | 360 | mss->resident += ptent_size; |
361 | /* Accumulate the size in pages that have been accessed. */ | 361 | /* Accumulate the size in pages that have been accessed. */ |
362 | if (pte_young(ptent) || PageReferenced(page)) | 362 | if (pte_young(ptent) || PageReferenced(page)) |
363 | mss->referenced += PAGE_SIZE; | 363 | mss->referenced += ptent_size; |
364 | mapcount = page_mapcount(page); | 364 | mapcount = page_mapcount(page); |
365 | if (mapcount >= 2) { | 365 | if (mapcount >= 2) { |
366 | if (pte_dirty(ptent) || PageDirty(page)) | 366 | if (pte_dirty(ptent) || PageDirty(page)) |
367 | mss->shared_dirty += PAGE_SIZE; | 367 | mss->shared_dirty += ptent_size; |
368 | else | 368 | else |
369 | mss->shared_clean += PAGE_SIZE; | 369 | mss->shared_clean += ptent_size; |
370 | mss->pss += (PAGE_SIZE << PSS_SHIFT) / mapcount; | 370 | mss->pss += (ptent_size << PSS_SHIFT) / mapcount; |
371 | } else { | 371 | } else { |
372 | if (pte_dirty(ptent) || PageDirty(page)) | 372 | if (pte_dirty(ptent) || PageDirty(page)) |
373 | mss->private_dirty += PAGE_SIZE; | 373 | mss->private_dirty += ptent_size; |
374 | else | 374 | else |
375 | mss->private_clean += PAGE_SIZE; | 375 | mss->private_clean += ptent_size; |
376 | mss->pss += (PAGE_SIZE << PSS_SHIFT); | 376 | mss->pss += (ptent_size << PSS_SHIFT); |
377 | } | 377 | } |
378 | } | 378 | } |
379 | 379 | ||
@@ -389,7 +389,7 @@ static int smaps_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, | |||
389 | 389 | ||
390 | pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl); | 390 | pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl); |
391 | for (; addr != end; pte++, addr += PAGE_SIZE) | 391 | for (; addr != end; pte++, addr += PAGE_SIZE) |
392 | smaps_pte_entry(*pte, addr, walk); | 392 | smaps_pte_entry(*pte, addr, PAGE_SIZE, walk); |
393 | pte_unmap_unlock(pte - 1, ptl); | 393 | pte_unmap_unlock(pte - 1, ptl); |
394 | cond_resched(); | 394 | cond_resched(); |
395 | return 0; | 395 | return 0; |