On Wed, Aug 20, 2025 at 09:40:40AM -0600, Nico Pache wrote: [...] >> >> > if (!thp_vma_suitable_order(vma, address, PMD_ORDER)) >> > return SCAN_ADDRESS_RANGE; >> > - if (!thp_vma_allowable_order(vma, vma->vm_flags, type, PMD_ORDER)) >> > + if (!thp_vma_allowable_orders(vma, vma->vm_flags, type, orders)) >> > return SCAN_VMA_CHECK; >> > /* >> > * Anon VMA expected, the address may be unmapped then >> > @@ -1134,7 +1135,8 @@ 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, cc, >> > + BIT(HPAGE_PMD_ORDER)); >> >> Shouldn't this be PMD order? Seems equivalent. >Yeah i'm actually not sure why we have both... they seem to be the >same thing, but perhaps there is some reason for having two...
I am confused with these two, PMD_ORDER above and HPAGE_PMD_ORDER from here. Do we have a guide on when to use which? >> >> > if (result != SCAN_SUCCEED) { >> > mmap_read_unlock(mm); >> > goto out_nolock; >> > @@ -1168,7 +1170,8 @@ 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, cc, >> > + BIT(HPAGE_PMD_ORDER)); >> > if (result != SCAN_SUCCEED) >> > goto out_up_write; >> > /* check if the pmd is still valid */ >> > @@ -2807,7 +2810,7 @@ int madvise_collapse(struct vm_area_struct *vma, >> > unsigned long start, >> > mmap_read_lock(mm); >> > mmap_locked = true; >> > result = hugepage_vma_revalidate(mm, addr, false, >> > &vma, >> > - cc); >> > + cc, >> > BIT(HPAGE_PMD_ORDER)); >> > if (result != SCAN_SUCCEED) { >> > last_fail = result; >> > goto out_nolock; >> > -- >> > 2.50.1 >> > >> > -- Wei Yang Help you, Help me