]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/khugepaged: avoid unnecessary mTHP collapse attempts
authorNico Pache <npache@redhat.com>
Fri, 5 Jun 2026 16:14:19 +0000 (10:14 -0600)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 21 Jun 2026 18:31:32 +0000 (11:31 -0700)
There are cases where, if an attempted collapse fails, all subsequent
orders are guaranteed to also fail.  Avoid these collapse attempts by
bailing out early.

Link: https://lore.kernel.org/20260605161422.213817-13-npache@redhat.com
Signed-off-by: Nico Pache <npache@redhat.com>
Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
Acked-by: Usama Arif <usama.arif@linux.dev>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Lance Yang <lance.yang@linux.dev>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Bagas Sanjaya <bagasdotme@gmail.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Brendan Jackman <jackmanb@google.com>
Cc: Byungchul Park <byungchul@sk.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Dev Jain <dev.jain@arm.com>
Cc: Gregory Price <gourry@gourry.net>
Cc: "Huang, Ying" <ying.huang@linux.alibaba.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Jann Horn <jannh@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Nanyong Sun <sunnanyong@huawei.com>
Cc: Pedro Falcato <pfalcato@suse.de>
Cc: Peter Xu <peterx@redhat.com>
Cc: Rafael Aquini <raquini@redhat.com>
Cc: Rakie Kim <rakie.kim@sk.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Shivank Garg <shivankg@amd.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Takashi Iwai (SUSE) <tiwai@suse.de>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Usama Arif <usamaarif642@gmail.com>
Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Wei Yang <richard.weiyang@gmail.com>
Cc: Will Deacon <will@kernel.org>
Cc: Yang Shi <yang@os.amperecomputing.com>
Cc: Zach O'Keefe <zokeefe@google.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/khugepaged.c

index e57289f4d3c663a5c414161ce7e98f5ca47cd587..5a2adbdbd0557771ed983833a3773ef3ee5e477b 100644 (file)
@@ -1504,6 +1504,7 @@ static enum scan_result mthp_collapse(struct mm_struct *mm,
                        collapse_address = address + offset * PAGE_SIZE;
                        ret = collapse_huge_page(mm, collapse_address, referenced,
                                                 unmapped, cc, order);
+
                        switch (ret) {
                        /* Cases where we continue to next collapse candidate */
                        case SCAN_SUCCEED:
@@ -1514,6 +1515,18 @@ static enum scan_result mthp_collapse(struct mm_struct *mm,
                        /* Cases where lower orders might still succeed */
                        case SCAN_ALLOC_HUGE_PAGE_FAIL:
                                alloc_failed = true;
+                               fallthrough;
+                       case SCAN_LACK_REFERENCED_PAGE:
+                       case SCAN_EXCEED_NONE_PTE:
+                       case SCAN_EXCEED_SWAP_PTE:
+                       case SCAN_EXCEED_SHARED_PTE:
+                       case SCAN_PAGE_LOCK:
+                       case SCAN_PAGE_COUNT:
+                       case SCAN_PAGE_NULL:
+                       case SCAN_DEL_PAGE_LRU:
+                       case SCAN_PTE_NON_PRESENT:
+                       case SCAN_PTE_UFFD_WP:
+                       case SCAN_PAGE_LAZYFREE:
                                last_result = ret;
                                goto next_order;
                        /* Cases where no further collapse is possible */