Thread (89 messages) 89 messages, 12 authors, 2025-09-11

Re: [PATCH v10 03/13] khugepaged: generalize hugepage_vma_revalidate for mTHP support

From: Zi Yan <ziy@nvidia.com>
Date: 2025-08-21 14:09:20
Also in: linux-doc, linux-mm, lkml

On 20 Aug 2025, at 23:41, Wei Yang wrote:
On Wed, Aug 20, 2025 at 09:40:40AM -0600, Nico Pache wrote:
[...]
quoted
quoted
quoted
      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).
quoted
quoted
quoted
      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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help