On 08/02, Song Liu wrote: > > +void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) > +{ > + unsigned long haddr = addr & HPAGE_PMD_MASK; > + struct vm_area_struct *vma = find_vma(mm, haddr); > + pmd_t *pmd = mm_find_pmd(mm, haddr); > + struct page *hpage = NULL; > + spinlock_t *ptl; > + int count = 0; > + pmd_t _pmd; > + int i; > + > + if (!vma || !vma->vm_file || !pmd || > + vma->vm_start > haddr || vma->vm_end < haddr + HPAGE_PMD_SIZE) > + return; I still can't understand why is it safe to blindly use mm_find_pmd(). Say, what pmd_offset(pud, address) will return to this function if pud_huge() == T? IIUC, this is possible if is_file_hugepages(vm_file). How the code below can use this result? I think you need something like hugepage_vma_check() or even hugepage_vma_revalidate(). Oleg.