forked from Minki/linux
mm/page_vma_mapped.c: explicitly compare pfn for normal, hugetlbfs and THP page
When check_pte, pfn of normal, hugetlbfs and THP page need be compared. The current implementation apply comparison as - normal 4K page: page_pfn <= pfn < page_pfn + 1 - hugetlbfs page: page_pfn <= pfn < page_pfn + HPAGE_PMD_NR - THP page: page_pfn <= pfn < page_pfn + HPAGE_PMD_NR in pfn_in_hpage. For hugetlbfs page, it should be page_pfn == pfn Now, change pfn_in_hpage to pfn_is_match to highlight that comparison is not only for THP and explicitly compare for these cases. No impact upon current behavior, just make the code clear. I think it is important to make the code clear - comparing hugetlbfs page in range page_pfn <= pfn < page_pfn + HPAGE_PMD_NR is confusing. Link: http://lkml.kernel.org/r/1578737885-8890-1-git-send-email-lixinhai.lxh@gmail.com Signed-off-by: Li Xinhai <lixinhai.lxh@gmail.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Michal Hocko <mhocko@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
92855270ff
commit
5b8d6e37b5
@ -52,12 +52,16 @@ static bool map_pte(struct page_vma_mapped_walk *pvmw)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool pfn_in_hpage(struct page *hpage, unsigned long pfn)
|
static inline bool pfn_is_match(struct page *page, unsigned long pfn)
|
||||||
{
|
{
|
||||||
unsigned long hpage_pfn = page_to_pfn(hpage);
|
unsigned long page_pfn = page_to_pfn(page);
|
||||||
|
|
||||||
|
/* normal page and hugetlbfs page */
|
||||||
|
if (!PageTransCompound(page) || PageHuge(page))
|
||||||
|
return page_pfn == pfn;
|
||||||
|
|
||||||
/* THP can be referenced by any subpage */
|
/* THP can be referenced by any subpage */
|
||||||
return pfn >= hpage_pfn && pfn - hpage_pfn < hpage_nr_pages(hpage);
|
return pfn >= page_pfn && pfn - page_pfn < hpage_nr_pages(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -108,7 +112,7 @@ static bool check_pte(struct page_vma_mapped_walk *pvmw)
|
|||||||
pfn = pte_pfn(*pvmw->pte);
|
pfn = pte_pfn(*pvmw->pte);
|
||||||
}
|
}
|
||||||
|
|
||||||
return pfn_in_hpage(pvmw->page, pfn);
|
return pfn_is_match(pvmw->page, pfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user