On Thu, Jan 09, 2020 at 06:44:40AM +0000, Li Xinhai wrote: > check_pte is called for hugetlbfs page and comparing pfn in pfn_in_page, > where pfn is compared in range [hpage_pfn, hpage_pfn+HPAGE_PMD_NR). Now > change it to match exactly for hugetlbfs page to avoid hiding any > potential problems. Hm. What potential problems do you talk about? I understand that for hugetlb pages pfn is always has to be equal hpage_pfn, but returning false for pfn in the range of the hugetlb page just because it's not head is not helpful. I would rather have VM_BUG_ON_PAGE(PageHuge(hpage) && pfn != hpage_pfn, hpage); there. > > Signed-off-by: Li Xinhai <lixinhai.lxh@xxxxxxxxx> > Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > --- > mm/page_vma_mapped.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c > index eff4b45..434978b 100644 > --- a/mm/page_vma_mapped.c > +++ b/mm/page_vma_mapped.c > @@ -55,6 +55,8 @@ static bool map_pte(struct page_vma_mapped_walk *pvmw) > static inline bool pfn_in_hpage(struct page *hpage, unsigned long pfn) > { > unsigned long hpage_pfn = page_to_pfn(hpage); > + if (unlikely(PageHuge(hpage))) > + return pfn == hpage_pfn; > > /* THP can be referenced by any subpage */ > return pfn >= hpage_pfn && pfn - hpage_pfn < hpage_nr_pages(hpage); > -- > 1.8.3.1 > > -- Kirill A. Shutemov