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

mm: khugepaged: reorg some khugepaged helpers

The khugepaged_{enabled|always|req_madv} are not khugepaged only anymore,
move them to huge_mm.h and rename to hugepage_flags_xxx, and remove
khugepaged_req_madv due to no users.

Also move khugepaged_defrag to khugepaged.c since its only caller is in
that file, it doesn't have to be in a header file.

Link: https://lkml.kernel.org/r/20220616174840.1202070-7-shy828301@gmail.com
Signed-off-by: Yang Shi <shy828301@gmail.com>
Reviewed-by: Zach O'Keefe <zokeefe@google.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Yang Shi and committed by
akpm
1064026b 7da4e2cb

+21 -23
+8
include/linux/huge_mm.h
··· 116 116 117 117 extern unsigned long transparent_hugepage_flags; 118 118 119 + #define hugepage_flags_enabled() \ 120 + (transparent_hugepage_flags & \ 121 + ((1<<TRANSPARENT_HUGEPAGE_FLAG) | \ 122 + (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG))) 123 + #define hugepage_flags_always() \ 124 + (transparent_hugepage_flags & \ 125 + (1<<TRANSPARENT_HUGEPAGE_FLAG)) 126 + 119 127 /* 120 128 * Do the below checks: 121 129 * - For file vma, check if the linear page offset of vma is
-14
include/linux/khugepaged.h
··· 24 24 } 25 25 #endif 26 26 27 - #define khugepaged_enabled() \ 28 - (transparent_hugepage_flags & \ 29 - ((1<<TRANSPARENT_HUGEPAGE_FLAG) | \ 30 - (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG))) 31 - #define khugepaged_always() \ 32 - (transparent_hugepage_flags & \ 33 - (1<<TRANSPARENT_HUGEPAGE_FLAG)) 34 - #define khugepaged_req_madv() \ 35 - (transparent_hugepage_flags & \ 36 - (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)) 37 - #define khugepaged_defrag() \ 38 - (transparent_hugepage_flags & \ 39 - (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)) 40 - 41 27 static inline void khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm) 42 28 { 43 29 if (test_bit(MMF_VM_HUGEPAGE, &oldmm->flags))
+2 -2
mm/huge_memory.c
··· 120 120 if (!in_pf && shmem_file(vma->vm_file)) 121 121 return shmem_huge_enabled(vma); 122 122 123 - if (!khugepaged_enabled()) 123 + if (!hugepage_flags_enabled()) 124 124 return false; 125 125 126 126 /* THP settings require madvise. */ 127 - if (!(vm_flags & VM_HUGEPAGE) && !khugepaged_always()) 127 + if (!(vm_flags & VM_HUGEPAGE) && !hugepage_flags_always()) 128 128 return false; 129 129 130 130 /* Only regular file is valid */
+11 -7
mm/khugepaged.c
··· 465 465 unsigned long vm_flags) 466 466 { 467 467 if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags) && 468 - khugepaged_enabled()) { 468 + hugepage_flags_enabled()) { 469 469 if (hugepage_vma_check(vma, vm_flags, false, false)) 470 470 __khugepaged_enter(vma->vm_mm); 471 471 } ··· 761 761 return false; 762 762 } 763 763 764 + #define khugepaged_defrag() \ 765 + (transparent_hugepage_flags & \ 766 + (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)) 767 + 764 768 /* Defrag for khugepaged will enter direct reclaim/compaction if necessary */ 765 769 static inline gfp_t alloc_hugepage_khugepaged_gfpmask(void) 766 770 { ··· 862 858 khugepaged_alloc_sleep(); 863 859 } else 864 860 count_vm_event(THP_COLLAPSE_ALLOC); 865 - } while (unlikely(!hpage) && likely(khugepaged_enabled())); 861 + } while (unlikely(!hpage) && likely(hugepage_flags_enabled())); 866 862 867 863 return hpage; 868 864 } ··· 2176 2172 static int khugepaged_has_work(void) 2177 2173 { 2178 2174 return !list_empty(&khugepaged_scan.mm_head) && 2179 - khugepaged_enabled(); 2175 + hugepage_flags_enabled(); 2180 2176 } 2181 2177 2182 2178 static int khugepaged_wait_event(void) ··· 2241 2237 return; 2242 2238 } 2243 2239 2244 - if (khugepaged_enabled()) 2240 + if (hugepage_flags_enabled()) 2245 2241 wait_event_freezable(khugepaged_wait, khugepaged_wait_event()); 2246 2242 } 2247 2243 ··· 2272 2268 int nr_zones = 0; 2273 2269 unsigned long recommended_min; 2274 2270 2275 - if (!khugepaged_enabled()) { 2271 + if (!hugepage_flags_enabled()) { 2276 2272 calculate_min_free_kbytes(); 2277 2273 goto update_wmarks; 2278 2274 } ··· 2322 2318 int err = 0; 2323 2319 2324 2320 mutex_lock(&khugepaged_mutex); 2325 - if (khugepaged_enabled()) { 2321 + if (hugepage_flags_enabled()) { 2326 2322 if (!khugepaged_thread) 2327 2323 khugepaged_thread = kthread_run(khugepaged, NULL, 2328 2324 "khugepaged"); ··· 2348 2344 void khugepaged_min_free_kbytes_update(void) 2349 2345 { 2350 2346 mutex_lock(&khugepaged_mutex); 2351 - if (khugepaged_enabled() && khugepaged_thread) 2347 + if (hugepage_flags_enabled() && khugepaged_thread) 2352 2348 set_recommended_min_free_kbytes(); 2353 2349 mutex_unlock(&khugepaged_mutex); 2354 2350 }