Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/khugepaged: unify SCAN_PMD_NONE and SCAN_PMD_NULL into SCAN_NO_PTE_TABLE

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>

authored by

Wei Yang and committed by
Andrew Morton
9e014077 f1040f88

+11 -15
+1 -2
include/trace/events/huge_memory.h
··· 10 10 #define SCAN_STATUS \ 11 11 EM( SCAN_FAIL, "failed") \ 12 12 EM( SCAN_SUCCEED, "succeeded") \ 13 - EM( SCAN_PMD_NULL, "pmd_null") \ 14 - EM( SCAN_PMD_NONE, "pmd_none") \ 13 + EM( SCAN_NO_PTE_TABLE, "no_pte_table") \ 15 14 EM( SCAN_PMD_MAPPED, "page_pmd_mapped") \ 16 15 EM( SCAN_EXCEED_NONE_PTE, "exceed_none_pte") \ 17 16 EM( SCAN_EXCEED_SWAP_PTE, "exceed_swap_pte") \
+10 -13
mm/khugepaged.c
··· 30 30 enum scan_result { 31 31 SCAN_FAIL, 32 32 SCAN_SUCCEED, 33 - SCAN_PMD_NULL, 34 - SCAN_PMD_NONE, 33 + SCAN_NO_PTE_TABLE, 35 34 SCAN_PMD_MAPPED, 36 35 SCAN_EXCEED_NONE_PTE, 37 36 SCAN_EXCEED_SWAP_PTE, ··· 933 934 pmd_t pmde = pmdp_get_lockless(pmd); 934 935 935 936 if (pmd_none(pmde)) 936 - return SCAN_PMD_NONE; 937 + return SCAN_NO_PTE_TABLE; 937 938 938 939 /* 939 940 * The folio may be under migration when khugepaged is trying to ··· 943 944 if (pmd_is_migration_entry(pmde)) 944 945 return SCAN_PMD_MAPPED; 945 946 if (!pmd_present(pmde)) 946 - return SCAN_PMD_NULL; 947 + return SCAN_NO_PTE_TABLE; 947 948 if (pmd_trans_huge(pmde)) 948 949 return SCAN_PMD_MAPPED; 949 950 if (pmd_bad(pmde)) 950 - return SCAN_PMD_NULL; 951 + return SCAN_NO_PTE_TABLE; 951 952 return SCAN_SUCCEED; 952 953 } 953 954 ··· 957 958 { 958 959 *pmd = mm_find_pmd(mm, address); 959 960 if (!*pmd) 960 - return SCAN_PMD_NULL; 961 + return SCAN_NO_PTE_TABLE; 961 962 962 963 return check_pmd_state(*pmd); 963 964 } ··· 1012 1013 pte = pte_offset_map_ro_nolock(mm, pmd, addr, &ptl); 1013 1014 if (!pte) { 1014 1015 mmap_read_unlock(mm); 1015 - result = SCAN_PMD_NULL; 1016 + result = SCAN_NO_PTE_TABLE; 1016 1017 goto out; 1017 1018 } 1018 1019 } ··· 1186 1187 &compound_pagelist); 1187 1188 spin_unlock(pte_ptl); 1188 1189 } else { 1189 - result = SCAN_PMD_NULL; 1190 + result = SCAN_NO_PTE_TABLE; 1190 1191 } 1191 1192 1192 1193 if (unlikely(result != SCAN_SUCCEED)) { ··· 1269 1270 nodes_clear(cc->alloc_nmask); 1270 1271 pte = pte_offset_map_lock(mm, pmd, start_addr, &ptl); 1271 1272 if (!pte) { 1272 - result = SCAN_PMD_NULL; 1273 + result = SCAN_NO_PTE_TABLE; 1273 1274 goto out; 1274 1275 } 1275 1276 ··· 1543 1544 switch (result) { 1544 1545 case SCAN_SUCCEED: 1545 1546 break; 1546 - case SCAN_PMD_NULL: 1547 - case SCAN_PMD_NONE: 1547 + case SCAN_NO_PTE_TABLE: 1548 1548 /* 1549 1549 * All pte entries have been removed and pmd cleared. 1550 1550 * Skip all the pte checks and just update the pmd mapping. ··· 2830 2832 mmap_read_unlock(mm); 2831 2833 goto handle_result; 2832 2834 /* Whitelisted set of results where continuing OK */ 2833 - case SCAN_PMD_NULL: 2834 - case SCAN_PMD_NONE: 2835 + case SCAN_NO_PTE_TABLE: 2835 2836 case SCAN_PTE_NON_PRESENT: 2836 2837 case SCAN_PTE_UFFD_WP: 2837 2838 case SCAN_LACK_REFERENCED_PAGE: