1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LINUX_KHUGEPAGED_H 3#define _LINUX_KHUGEPAGED_H 4 5#include <linux/sched/coredump.h> /* MMF_VM_HUGEPAGE */ 6 7#ifdef CONFIG_TRANSPARENT_HUGEPAGE 8extern struct attribute_group khugepaged_attr_group; 9 10extern int khugepaged_init(void); 11extern void khugepaged_destroy(void); 12extern int start_stop_khugepaged(void); 13extern void __khugepaged_enter(struct mm_struct *mm); 14extern void __khugepaged_exit(struct mm_struct *mm); 15extern void khugepaged_enter_vma(struct vm_area_struct *vma, 16 unsigned long vm_flags); 17extern void khugepaged_min_free_kbytes_update(void); 18extern bool current_is_khugepaged(void); 19#ifdef CONFIG_SHMEM 20extern int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, 21 bool install_pmd); 22#else 23static inline int collapse_pte_mapped_thp(struct mm_struct *mm, 24 unsigned long addr, bool install_pmd) 25{ 26 return 0; 27} 28#endif 29 30static inline void khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm) 31{ 32 if (test_bit(MMF_VM_HUGEPAGE, &oldmm->flags)) 33 __khugepaged_enter(mm); 34} 35 36static inline void khugepaged_exit(struct mm_struct *mm) 37{ 38 if (test_bit(MMF_VM_HUGEPAGE, &mm->flags)) 39 __khugepaged_exit(mm); 40} 41#else /* CONFIG_TRANSPARENT_HUGEPAGE */ 42static inline void khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm) 43{ 44} 45static inline void khugepaged_exit(struct mm_struct *mm) 46{ 47} 48static inline void khugepaged_enter_vma(struct vm_area_struct *vma, 49 unsigned long vm_flags) 50{ 51} 52static inline int collapse_pte_mapped_thp(struct mm_struct *mm, 53 unsigned long addr, bool install_pmd) 54{ 55 return 0; 56} 57 58static inline void khugepaged_min_free_kbytes_update(void) 59{ 60} 61 62static inline bool current_is_khugepaged(void) 63{ 64 return false; 65} 66#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ 67 68#endif /* _LINUX_KHUGEPAGED_H */ 69