xref: /linux/include/linux/ksm.h (revision f8af4da3b4c14e7267c4ffb952079af3912c51c5)
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