From: "Kiryl Shutsemau (Meta)" <[email protected]>

Preparation for building the new collapse engine in its own file.  The
engine and khugepaged.c need to agree on what a collapse result is and
what state a scan carries.

Move enum scan_result and struct collapse_control into a new
mm/collapse.h.

No functional change intended.

Assisted-by: Claude-Code:claude-opus-5
Signed-off-by: Kiryl Shutsemau (Meta) <[email protected]>
---
 mm/collapse.h   | 60 +++++++++++++++++++++++++++++++++++++++++++++++++
 mm/khugepaged.c | 52 +-----------------------------------------
 2 files changed, 61 insertions(+), 51 deletions(-)
 create mode 100644 mm/collapse.h

diff --git a/mm/collapse.h b/mm/collapse.h
new file mode 100644
index 000000000000..26dbac7beddd
--- /dev/null
+++ b/mm/collapse.h
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __MM_COLLAPSE_H
+#define __MM_COLLAPSE_H
+
+#include <linux/nodemask.h>
+#include <linux/pgtable.h>
+#include <linux/types.h>
+
+enum scan_result {
+       SCAN_FAIL,
+       SCAN_SUCCEED,
+       SCAN_NO_PTE_TABLE,
+       SCAN_PMD_MAPPED,
+       SCAN_EXCEED_NONE_PTE,
+       SCAN_EXCEED_SWAP_PTE,
+       SCAN_EXCEED_SHARED_PTE,
+       SCAN_PTE_NON_PRESENT,
+       SCAN_PTE_UFFD,
+       SCAN_PTE_MAPPED_HUGEPAGE,
+       SCAN_LACK_REFERENCED_PAGE,
+       SCAN_PAGE_NULL,
+       SCAN_SCAN_ABORT,
+       SCAN_PAGE_COUNT,
+       SCAN_PAGE_LRU,
+       SCAN_PAGE_LOCK,
+       SCAN_PAGE_ANON,
+       SCAN_PAGE_LAZYFREE,
+       SCAN_PAGE_COMPOUND,
+       SCAN_ANY_PROCESS,
+       SCAN_VMA_NULL,
+       SCAN_VMA_CHECK,
+       SCAN_ADDRESS_RANGE,
+       SCAN_DEL_PAGE_LRU,
+       SCAN_ALLOC_HUGE_PAGE_FAIL,
+       SCAN_CGROUP_CHARGE_FAIL,
+       SCAN_TRUNCATED,
+       SCAN_PAGE_HAS_PRIVATE,
+       SCAN_STORE_FAILED,
+       SCAN_COPY_MC,
+       SCAN_PAGE_FILLED,
+       SCAN_PAGE_DIRTY_OR_WRITEBACK,
+};
+
+struct collapse_control {
+       bool is_khugepaged;
+
+       /* Num pages scanned per node */
+       u32 node_load[MAX_NUMNODES];
+
+       /* Num pages scanned (see khugepaged_pages_to_scan) */
+       unsigned int progress;
+
+       /* nodemask for allocation fallback */
+       nodemask_t alloc_nmask;
+
+       /* Each bit represents a single occupied (!none/zero) page. */
+       DECLARE_BITMAP(mthp_present_ptes, MAX_PTRS_PER_PTE);
+};
+
+#endif /* __MM_COLLAPSE_H */
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 5f7126cf42f5..804b1d35f52a 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -26,45 +26,11 @@
 #include <linux/cleanup.h>
 
 #include <asm/tlb.h>
+#include "collapse.h"
 #include "internal.h"
 #include "page_alloc.h"
 #include "mm_slot.h"
 
-enum scan_result {
-       SCAN_FAIL,
-       SCAN_SUCCEED,
-       SCAN_NO_PTE_TABLE,
-       SCAN_PMD_MAPPED,
-       SCAN_EXCEED_NONE_PTE,
-       SCAN_EXCEED_SWAP_PTE,
-       SCAN_EXCEED_SHARED_PTE,
-       SCAN_PTE_NON_PRESENT,
-       SCAN_PTE_UFFD,
-       SCAN_PTE_MAPPED_HUGEPAGE,
-       SCAN_LACK_REFERENCED_PAGE,
-       SCAN_PAGE_NULL,
-       SCAN_SCAN_ABORT,
-       SCAN_PAGE_COUNT,
-       SCAN_PAGE_LRU,
-       SCAN_PAGE_LOCK,
-       SCAN_PAGE_ANON,
-       SCAN_PAGE_LAZYFREE,
-       SCAN_PAGE_COMPOUND,
-       SCAN_ANY_PROCESS,
-       SCAN_VMA_NULL,
-       SCAN_VMA_CHECK,
-       SCAN_ADDRESS_RANGE,
-       SCAN_DEL_PAGE_LRU,
-       SCAN_ALLOC_HUGE_PAGE_FAIL,
-       SCAN_CGROUP_CHARGE_FAIL,
-       SCAN_TRUNCATED,
-       SCAN_PAGE_HAS_PRIVATE,
-       SCAN_STORE_FAILED,
-       SCAN_COPY_MC,
-       SCAN_PAGE_FILLED,
-       SCAN_PAGE_DIRTY_OR_WRITEBACK,
-};
-
 #define CREATE_TRACE_POINTS
 #include <trace/events/huge_memory.h>
 
@@ -103,22 +69,6 @@ static struct kmem_cache *mm_slot_cache __ro_after_init;
 
 #define KHUGEPAGED_MIN_MTHP_ORDER      2
 
-struct collapse_control {
-       bool is_khugepaged;
-
-       /* Num pages scanned per node */
-       u32 node_load[MAX_NUMNODES];
-
-       /* Num pages scanned (see khugepaged_pages_to_scan) */
-       unsigned int progress;
-
-       /* nodemask for allocation fallback */
-       nodemask_t alloc_nmask;
-
-       /* Each bit represents a single occupied (!none/zero) page. */
-       DECLARE_BITMAP(mthp_present_ptes, MAX_PTRS_PER_PTE);
-};
-
 /**
  * struct khugepaged_scan - cursor for scanning
  * @mm_head: the head of the mm list to scan
-- 
2.54.0


Reply via email to