Messages in this thread Patch in this message |  | | From | Nico Pache <> | | Subject | [PATCH 7.2 v16 11/13] mm/khugepaged: avoid unnecessary mTHP collapse attempts | | Date | Sun, 19 Apr 2026 12:57:48 -0600 |
| |
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.
Reviewed-by: Lorenzo Stoakes <ljs@kernel.org> Acked-by: Usama Arif <usama.arif@linux.dev> Acked-by: David Hildenbrand (Arm) <david@kernel.org> Signed-off-by: Nico Pache <npache@redhat.com> --- mm/khugepaged.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 81ea7cbc54b2..13b05bbb08e7 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1517,9 +1517,31 @@ static int mthp_collapse(struct mm_struct *mm, unsigned long address, collapse_address = address + offset * PAGE_SIZE; ret = collapse_huge_page(mm, collapse_address, referenced, unmapped, cc, order); - if (ret == SCAN_SUCCEED) { + + switch (ret) { + /* Cases where we continue to next collapse candidate */ + case SCAN_SUCCEED: collapsed += nr_ptes; + fallthrough; + case SCAN_PTE_MAPPED_HUGEPAGE: continue; + /* Cases where lower orders might still succeed */ + 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_LRU: + case SCAN_PAGE_NULL: + case SCAN_DEL_PAGE_LRU: + case SCAN_PTE_NON_PRESENT: + case SCAN_PTE_UFFD_WP: + case SCAN_ALLOC_HUGE_PAGE_FAIL: + goto next_order; + /* Cases where no further collapse is possible */ + default: + return collapsed; } } -- 2.53.0
|  |