1*f8af4da3SHugh Dickins #ifndef __LINUX_KSM_H 2*f8af4da3SHugh Dickins #define __LINUX_KSM_H 3*f8af4da3SHugh Dickins /* 4*f8af4da3SHugh Dickins * Memory merging support. 5*f8af4da3SHugh Dickins * 6*f8af4da3SHugh Dickins * This code enables dynamic sharing of identical pages found in different 7*f8af4da3SHugh Dickins * memory areas, even if they are not shared by fork(). 8*f8af4da3SHugh Dickins */ 9*f8af4da3SHugh Dickins 10*f8af4da3SHugh Dickins #include <linux/bitops.h> 11*f8af4da3SHugh Dickins #include <linux/mm.h> 12*f8af4da3SHugh Dickins #include <linux/sched.h> 13*f8af4da3SHugh Dickins 14*f8af4da3SHugh Dickins #ifdef CONFIG_KSM 15*f8af4da3SHugh Dickins int ksm_madvise(struct vm_area_struct *vma, unsigned long start, 16*f8af4da3SHugh Dickins unsigned long end, int advice, unsigned long *vm_flags); 17*f8af4da3SHugh Dickins int __ksm_enter(struct mm_struct *mm); 18*f8af4da3SHugh Dickins void __ksm_exit(struct mm_struct *mm); 19*f8af4da3SHugh Dickins 20*f8af4da3SHugh Dickins static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) 21*f8af4da3SHugh Dickins { 22*f8af4da3SHugh Dickins if (test_bit(MMF_VM_MERGEABLE, &oldmm->flags)) 23*f8af4da3SHugh Dickins return __ksm_enter(mm); 24*f8af4da3SHugh Dickins return 0; 25*f8af4da3SHugh Dickins } 26*f8af4da3SHugh Dickins 27*f8af4da3SHugh Dickins static inline void ksm_exit(struct mm_struct *mm) 28*f8af4da3SHugh Dickins { 29*f8af4da3SHugh Dickins if (test_bit(MMF_VM_MERGEABLE, &mm->flags)) 30*f8af4da3SHugh Dickins __ksm_exit(mm); 31*f8af4da3SHugh Dickins } 32*f8af4da3SHugh Dickins #else /* !CONFIG_KSM */ 33*f8af4da3SHugh Dickins 34*f8af4da3SHugh Dickins static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, 35*f8af4da3SHugh Dickins unsigned long end, int advice, unsigned long *vm_flags) 36*f8af4da3SHugh Dickins { 37*f8af4da3SHugh Dickins return 0; 38*f8af4da3SHugh Dickins } 39*f8af4da3SHugh Dickins 40*f8af4da3SHugh Dickins static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) 41*f8af4da3SHugh Dickins { 42*f8af4da3SHugh Dickins return 0; 43*f8af4da3SHugh Dickins } 44*f8af4da3SHugh Dickins 45*f8af4da3SHugh Dickins static inline void ksm_exit(struct mm_struct *mm) 46*f8af4da3SHugh Dickins { 47*f8af4da3SHugh Dickins } 48*f8af4da3SHugh Dickins #endif /* !CONFIG_KSM */ 49*f8af4da3SHugh Dickins 50*f8af4da3SHugh Dickins #endif 51