On 20 Aug 2025, at 23:41, Wei Yang wrote: > 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?
Looking at the definition of HPAGE_PMD_SHIFT in huge_mm.h, it will cause a build bug when PMD level huge page is not supported. So I think HPAGE_PMD_ORDER should be used for all huge pages (both THP and hugetlb). > >>> >>>> 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 -- Best Regards, Yan, Zi