aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/page_vma_mapped.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c
index 95601561439532..ae3c2a35d61b7c 100644
--- a/mm/page_vma_mapped.c
+++ b/mm/page_vma_mapped.c
@@ -30,6 +30,14 @@ static bool map_pte(struct page_vma_mapped_walk *pvmw)
return true;
}
+static inline bool pfn_in_hpage(struct page *hpage, unsigned long pfn)
+{
+ unsigned long hpage_pfn = page_to_pfn(hpage);
+
+ /* THP can be referenced by any subpage */
+ return pfn >= hpage_pfn && pfn - hpage_pfn < hpage_nr_pages(hpage);
+}
+
/**
* check_pte - check if @pvmw->page is mapped at the @pvmw->pte
*
@@ -78,14 +86,7 @@ static bool check_pte(struct page_vma_mapped_walk *pvmw)
pfn = pte_pfn(*pvmw->pte);
}
- if (pfn < page_to_pfn(pvmw->page))
- return false;
-
- /* THP can be referenced by any subpage */
- if (pfn - page_to_pfn(pvmw->page) >= hpage_nr_pages(pvmw->page))
- return false;
-
- return true;
+ return pfn_in_hpage(pvmw->page, pfn);
}
/**