|
@@ -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);
|
|
|
}
|
|
|
|
|
|
/**
|