On 16/12/2024 16:50, Dev Jain wrote: > Post retaking the lock, it must be checked that the VMA is suitable for our > scan order. Hence, generalize hugepage_vma_revalidate(). > > Signed-off-by: Dev Jain <dev.jain@xxxxxxx> > --- > mm/khugepaged.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 02cd424b8e48..2f0601795471 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -918,7 +918,7 @@ static int hpage_collapse_find_target_node(struct collapse_control *cc) > > static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address, > bool expect_anon, > - struct vm_area_struct **vmap, > + struct vm_area_struct **vmap, int order, > struct collapse_control *cc) > { > struct vm_area_struct *vma; > @@ -931,9 +931,9 @@ static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address, > if (!vma) > return SCAN_VMA_NULL; > > - if (!thp_vma_suitable_order(vma, address, PMD_ORDER)) > + if (!thp_vma_suitable_order(vma, address, order)) > return SCAN_ADDRESS_RANGE; > - if (!thp_vma_allowable_order(vma, vma->vm_flags, tva_flags, PMD_ORDER)) > + if (!thp_vma_allowable_order(vma, vma->vm_flags, tva_flags, order)) > return SCAN_VMA_CHECK; > /* > * Anon VMA expected, the address may be unmapped then > @@ -1134,7 +1134,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, > goto out_nolock; > > mmap_read_lock(mm); > - result = hugepage_vma_revalidate(mm, address, true, &vma, cc); > + result = hugepage_vma_revalidate(mm, address, true, &vma, order, cc); some more compilation issues: replace order with HPAGE_PMD_ORDER. > if (result != SCAN_SUCCEED) { > mmap_read_unlock(mm); > goto out_nolock; > @@ -1168,7 +1168,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, > * mmap_lock. > */ > mmap_write_lock(mm); > - result = hugepage_vma_revalidate(mm, address, true, &vma, cc); > + result = hugepage_vma_revalidate(mm, address, true, &vma, order, cc); and here. > if (result != SCAN_SUCCEED) > goto out_up_write; > /* check if the pmd is still valid */ > @@ -2776,7 +2776,7 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, > mmap_read_lock(mm); > mmap_locked = true; > result = hugepage_vma_revalidate(mm, addr, false, &vma, > - cc); > + HPAGE_PMD_ORDER, cc); > if (result != SCAN_SUCCEED) { > last_fail = result; > goto out_nolock;