* [to-be-updated] mm-extract-non-swap-page-handling-to-do_non_swap_page.patch removed from -mm tree
@ 2026-07-27 19:00 Andrew Morton
0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2026-07-27 19:00 UTC (permalink / raw)
To: mm-commits, vbabka, surenb, rppt, mhocko, ljs, liam, david,
lihongfu, akpm
The quilt patch titled
Subject: mm: extract non-swap page handling to do_non_swap_page()
has been removed from the -mm tree. Its filename was
mm-extract-non-swap-page-handling-to-do_non_swap_page.patch
This patch was dropped because an updated version will be issued
------------------------------------------------------
From: Hongfu Li <lihongfu@kylinos.cn>
Subject: mm: extract non-swap page handling to do_non_swap_page()
Date: Thu, 23 Jul 2026 11:07:52 +0800
Factor non-swap entry logic out of bloated do_swap_page() to simplify the
main swap fault flow and improve readability.
The new do_non_swap_page() handles migration, device private/exclusive,
hwpoison, marker and bad PTE entries.
Link: https://lore.kernel.org/20260723030752.16979-3-hongfu.li@linux.dev
Signed-off-by: Hongfu Li <lihongfu@kylinos.cn>
Cc: David Hildenbrand (Arm) <david@kernel.org>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
mm/memory.c | 120 ++++++++++++++++++++++++++++----------------------
1 file changed, 69 insertions(+), 51 deletions(-)
--- a/mm/memory.c~mm-extract-non-swap-page-handling-to-do_non_swap_page
+++ a/mm/memory.c
@@ -4866,6 +4866,74 @@ static void check_swap_exclusive(struct
} while (--nr_pages);
}
+static vm_fault_t do_non_swap_page(struct vm_fault *vmf)
+{
+ struct vm_area_struct *vma = vmf->vma;
+ struct folio *folio;
+ softleaf_t entry;
+ vm_fault_t ret = 0;
+
+ entry = softleaf_from_pte(vmf->orig_pte);
+ if (softleaf_is_migration(entry)) {
+ migration_entry_wait(vma->vm_mm, vmf->pmd,
+ vmf->address);
+ } else if (softleaf_is_device_exclusive(entry)) {
+ vmf->page = softleaf_to_page(entry);
+ ret = remove_device_exclusive_entry(vmf);
+ } else if (softleaf_is_device_private(entry)) {
+
+ if (vmf->flags & FAULT_FLAG_VMA_LOCK) {
+ /*
+ * migrate_to_ram is not yet ready to operate
+ * under VMA lock.
+ */
+ vma_end_read(vma);
+ return VM_FAULT_RETRY;
+ }
+
+ vmf->page = softleaf_to_page(entry);
+ vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
+ vmf->address, &vmf->ptl);
+ if (unlikely(!vmf->pte ||
+ !pte_same(ptep_get(vmf->pte),
+ vmf->orig_pte)))
+ goto unlock;
+
+ /*
+ * Get a folio reference while we know the folio can't be
+ * freed.
+ */
+ folio = page_folio(vmf->page);
+ if (folio_trylock(folio)) {
+ struct dev_pagemap *pgmap;
+
+ folio_get(folio);
+ pte_unmap_unlock(vmf->pte, vmf->ptl);
+ pgmap = page_pgmap(vmf->page);
+ ret = pgmap->ops->migrate_to_ram(vmf);
+ folio_unlock(folio);
+ folio_put(folio);
+ } else {
+ pte_unmap(vmf->pte);
+ softleaf_entry_wait_on_locked(entry, vmf->ptl);
+ }
+ } else if (softleaf_is_hwpoison(entry)) {
+ ret = VM_FAULT_HWPOISON;
+ } else if (softleaf_is_marker(entry)) {
+ ret = handle_pte_marker(vmf);
+ } else {
+ print_bad_pte(vma, vmf->address, vmf->orig_pte, NULL);
+ ret = VM_FAULT_SIGBUS;
+ }
+
+ return ret;
+
+unlock:
+ if (vmf->pte)
+ pte_unmap_unlock(vmf->pte, vmf->ptl);
+ return ret;
+}
+
/*
* We enter with either the VMA lock or the mmap_lock held (see
* FAULT_FLAG_VMA_LOCK), and pte mapped but not yet locked.
@@ -4896,57 +4964,7 @@ vm_fault_t do_swap_page(struct vm_fault
entry = softleaf_from_pte(vmf->orig_pte);
if (unlikely(!softleaf_is_swap(entry))) {
- if (softleaf_is_migration(entry)) {
- migration_entry_wait(vma->vm_mm, vmf->pmd,
- vmf->address);
- } else if (softleaf_is_device_exclusive(entry)) {
- vmf->page = softleaf_to_page(entry);
- ret = remove_device_exclusive_entry(vmf);
- } else if (softleaf_is_device_private(entry)) {
- if (vmf->flags & FAULT_FLAG_VMA_LOCK) {
- /*
- * migrate_to_ram is not yet ready to operate
- * under VMA lock.
- */
- vma_end_read(vma);
- ret = VM_FAULT_RETRY;
- goto out;
- }
-
- vmf->page = softleaf_to_page(entry);
- vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
- vmf->address, &vmf->ptl);
- if (unlikely(!vmf->pte ||
- !pte_same(ptep_get(vmf->pte),
- vmf->orig_pte)))
- goto unlock;
-
- /*
- * Get a folio reference while we know the folio can't be
- * freed.
- */
- folio = page_folio(vmf->page);
- if (folio_trylock(folio)) {
- struct dev_pagemap *pgmap;
-
- folio_get(folio);
- pte_unmap_unlock(vmf->pte, vmf->ptl);
- pgmap = page_pgmap(vmf->page);
- ret = pgmap->ops->migrate_to_ram(vmf);
- folio_unlock(folio);
- folio_put(folio);
- } else {
- pte_unmap(vmf->pte);
- softleaf_entry_wait_on_locked(entry, vmf->ptl);
- }
- } else if (softleaf_is_hwpoison(entry)) {
- ret = VM_FAULT_HWPOISON;
- } else if (softleaf_is_marker(entry)) {
- ret = handle_pte_marker(vmf);
- } else {
- print_bad_pte(vma, vmf->address, vmf->orig_pte, NULL);
- ret = VM_FAULT_SIGBUS;
- }
+ ret = do_non_swap_page(vmf);
goto out;
}
_
Patches currently in -mm which might be from lihongfu@kylinos.cn are
selftests-mm-move-pkey-selftest-helpers-to-pkey_utilc.patch
selftests-mm-unify-pkey-sighandler-selftest-assertions-and-tracing.patch
selftests-mm-use-pkey_assert-on-clone_raw-failure-in-pkey-test.patch
selftests-mm-add-missing-mmap-return-checks-in-pkey-tests.patch
selftests-mm-add-missing-pthread_create-return-checks-in-pkey-tests.patch
selftests-mm-fix-clone-cleartid-race-in-pkey-sighandler-tests.patch
selftests-mm-fix-memleak-in-migration-benchmark.patch
selftests-mm-factor-out-hmm_buffer_alloc-to-consolidate-buffer-setup.patch
selftests-mm-fix-bug_on-checking-wrong-variable-in-mremap_dontunmap.patch
mm-swap-fix-swap_cluster_lock-config_swap-stub-signature-mismatch.patch
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-27 19:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-27 19:00 [to-be-updated] mm-extract-non-swap-page-handling-to-do_non_swap_page.patch removed from -mm tree Andrew Morton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.