Skip to content

Commit

Permalink
break out numa_maps gather_pte_stats() checks
Browse files Browse the repository at this point in the history
gather_pte_stats() does a number of checks on a target page
to see whether it should even be considered for statistics.
This breaks that code out in to a separate function so that
we can use it in the transparent hugepage case in the next
patch.

Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
Acked-by: Hugh Dickins <hughd@google.com>
Reviewed-by: Christoph Lameter <cl@gentwo.org>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Dave Hansen authored and Linus Torvalds committed Sep 21, 2011
1 parent eb4866d commit 3200a8a
Showing 1 changed file with 24 additions and 15 deletions.
39 changes: 24 additions & 15 deletions fs/proc/task_mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -904,6 +904,29 @@ static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty,
md->node[page_to_nid(page)] += nr_pages;
}

static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma,
unsigned long addr)
{
struct page *page;
int nid;

if (!pte_present(pte))
return NULL;

page = vm_normal_page(vma, addr, pte);
if (!page)
return NULL;

if (PageReserved(page))
return NULL;

nid = page_to_nid(page);
if (!node_isset(nid, node_states[N_HIGH_MEMORY]))
return NULL;

return page;
}

static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
unsigned long end, struct mm_walk *walk)
{
Expand All @@ -915,23 +938,9 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
md = walk->private;
orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
do {
struct page *page;
int nid;

if (!pte_present(*pte))
continue;

page = vm_normal_page(md->vma, addr, *pte);
struct page *page = can_gather_numa_stats(*pte, md->vma, addr);
if (!page)
continue;

if (PageReserved(page))
continue;

nid = page_to_nid(page);
if (!node_isset(nid, node_states[N_HIGH_MEMORY]))
continue;

gather_stats(page, md, pte_dirty(*pte), 1);

} while (pte++, addr += PAGE_SIZE, addr != end);
Expand Down

0 comments on commit 3200a8a

Please sign in to comment.