On Tue, Aug 19, 2025 at 07:42:01AM -0600, Nico Pache wrote: > From: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> > > We have now allowed mTHP collapse, but thp_vma_allowable_order() still only > checks if the PMD-sized mTHP is allowed to collapse. This prevents scanning > and collapsing of 64K mTHP when only 64K mTHP is enabled. Thus, we should > modify the checks to allow all large orders of anonymous mTHP. > > Acked-by: David Hildenbrand <david@xxxxxxxxxx> > Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> > Signed-off-by: Nico Pache <npache@xxxxxxxxxx> > --- > mm/khugepaged.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 7d9b5100bea1..2cadd07341de 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -491,7 +491,11 @@ void khugepaged_enter_vma(struct vm_area_struct *vma, > { > if (!mm_flags_test(MMF_VM_HUGEPAGE, vma->vm_mm) && > hugepage_pmd_enabled()) { > - if (thp_vma_allowable_order(vma, vm_flags, TVA_KHUGEPAGED, PMD_ORDER)) > + unsigned long orders = vma_is_anonymous(vma) ? > + THP_ORDERS_ALL_ANON : BIT(PMD_ORDER); We need some explanation here please, a comment explaining what's going on here would go a long way. > + > + if (thp_vma_allowable_orders(vma, vm_flags, TVA_KHUGEPAGED, > + orders)) > __khugepaged_enter(vma->vm_mm); > } > } > @@ -2671,6 +2675,8 @@ static unsigned int collapse_scan_mm_slot(unsigned int pages, int *result, > > vma_iter_init(&vmi, mm, khugepaged_scan.address); > for_each_vma(vmi, vma) { > + unsigned long orders = vma_is_anonymous(vma) ? > + THP_ORDERS_ALL_ANON : BIT(PMD_ORDER); Can we have this as a separate helper function please? As you're now open-coding this in two places. In fact, you can put the comment I mention above there and have that document what's happening here. > unsigned long hstart, hend; > > cond_resched(); > @@ -2678,7 +2684,8 @@ static unsigned int collapse_scan_mm_slot(unsigned int pages, int *result, > progress++; > break; > } > - if (!thp_vma_allowable_order(vma, vma->vm_flags, TVA_KHUGEPAGED, PMD_ORDER)) { > + if (!thp_vma_allowable_orders(vma, vma->vm_flags, > + TVA_KHUGEPAGED, orders)) { > skip: > progress++; > continue; > -- > 2.50.1 >