]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/khugepaged: unify SCAN_PMD_NONE and SCAN_PMD_NULL into SCAN_NO_PTE_TABLE
authorWei Yang <richard.weiyang@gmail.com>
Fri, 14 Nov 2025 03:00:28 +0000 (03:00 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 24 Nov 2025 23:08:52 +0000 (15:08 -0800)
The current hugepage collapse scan results include two separate values,
SCAN_PMD_NONE and SCAN_PMD_NULL, which are handled identically by the
consuming code.

To reduce confusion and improve long-term maintenance, this commit merges
these two functionally equivalent states into a single, clearer
identifier: SCAN_NO_PTE_TABLE

Link: https://lkml.kernel.org/r/20251114030028.7035-4-richard.weiyang@gmail.com
Suggested-by: "David Hildenbrand (Red Hat)" <david@kernel.org>
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Reviewed-by: Dev Jain <dev.jain@arm.com>
Acked-by: David Hildenbrand (Red Hat) <david@kernel.org>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: Nico Pache <npache@redhat.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Lance Yang <lance.yang@linux.dev>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/trace/events/huge_memory.h
mm/khugepaged.c

index dd94d14a24272d942b66c053daf8ec94ba03dfb0..4cde53b45a85941a0f0364fff2b4223b4603adbb 100644 (file)
@@ -10,8 +10,7 @@
 #define SCAN_STATUS                                                    \
        EM( SCAN_FAIL,                  "failed")                       \
        EM( SCAN_SUCCEED,               "succeeded")                    \
-       EM( SCAN_PMD_NULL,              "pmd_null")                     \
-       EM( SCAN_PMD_NONE,              "pmd_none")                     \
+       EM( SCAN_NO_PTE_TABLE,          "no_pte_table")                 \
        EM( SCAN_PMD_MAPPED,            "page_pmd_mapped")              \
        EM( SCAN_EXCEED_NONE_PTE,       "exceed_none_pte")              \
        EM( SCAN_EXCEED_SWAP_PTE,       "exceed_swap_pte")              \
index 2ee5048b764e2c306faf90b8db7d010f5ae80413..40f9d5939aa5b496278bc3b8255977b2a6415cc6 100644 (file)
@@ -30,8 +30,7 @@
 enum scan_result {
        SCAN_FAIL,
        SCAN_SUCCEED,
-       SCAN_PMD_NULL,
-       SCAN_PMD_NONE,
+       SCAN_NO_PTE_TABLE,
        SCAN_PMD_MAPPED,
        SCAN_EXCEED_NONE_PTE,
        SCAN_EXCEED_SWAP_PTE,
@@ -934,7 +933,7 @@ static inline int check_pmd_state(pmd_t *pmd)
        pmd_t pmde = pmdp_get_lockless(pmd);
 
        if (pmd_none(pmde))
-               return SCAN_PMD_NONE;
+               return SCAN_NO_PTE_TABLE;
 
        /*
         * The folio may be under migration when khugepaged is trying to
@@ -944,11 +943,11 @@ static inline int check_pmd_state(pmd_t *pmd)
        if (pmd_is_migration_entry(pmde))
                return SCAN_PMD_MAPPED;
        if (!pmd_present(pmde))
-               return SCAN_PMD_NULL;
+               return SCAN_NO_PTE_TABLE;
        if (pmd_trans_huge(pmde))
                return SCAN_PMD_MAPPED;
        if (pmd_bad(pmde))
-               return SCAN_PMD_NULL;
+               return SCAN_NO_PTE_TABLE;
        return SCAN_SUCCEED;
 }
 
@@ -958,7 +957,7 @@ static int find_pmd_or_thp_or_none(struct mm_struct *mm,
 {
        *pmd = mm_find_pmd(mm, address);
        if (!*pmd)
-               return SCAN_PMD_NULL;
+               return SCAN_NO_PTE_TABLE;
 
        return check_pmd_state(*pmd);
 }
@@ -1013,7 +1012,7 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm,
                        pte = pte_offset_map_ro_nolock(mm, pmd, addr, &ptl);
                        if (!pte) {
                                mmap_read_unlock(mm);
-                               result = SCAN_PMD_NULL;
+                               result = SCAN_NO_PTE_TABLE;
                                goto out;
                        }
                }
@@ -1187,7 +1186,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address,
                                                      &compound_pagelist);
                spin_unlock(pte_ptl);
        } else {
-               result = SCAN_PMD_NULL;
+               result = SCAN_NO_PTE_TABLE;
        }
 
        if (unlikely(result != SCAN_SUCCEED)) {
@@ -1270,7 +1269,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
        nodes_clear(cc->alloc_nmask);
        pte = pte_offset_map_lock(mm, pmd, start_addr, &ptl);
        if (!pte) {
-               result = SCAN_PMD_NULL;
+               result = SCAN_NO_PTE_TABLE;
                goto out;
        }
 
@@ -1544,8 +1543,7 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr,
        switch (result) {
        case SCAN_SUCCEED:
                break;
-       case SCAN_PMD_NULL:
-       case SCAN_PMD_NONE:
+       case SCAN_NO_PTE_TABLE:
                /*
                 * All pte entries have been removed and pmd cleared.
                 * Skip all the pte checks and just update the pmd mapping.
@@ -2832,8 +2830,7 @@ handle_result:
                        mmap_read_unlock(mm);
                        goto handle_result;
                /* Whitelisted set of results where continuing OK */
-               case SCAN_PMD_NULL:
-               case SCAN_PMD_NONE:
+               case SCAN_NO_PTE_TABLE:
                case SCAN_PTE_NON_PRESENT:
                case SCAN_PTE_UFFD_WP:
                case SCAN_LACK_REFERENCED_PAGE: