1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef _LINUX_MEMCONTROL_H
21#define _LINUX_MEMCONTROL_H
22#include <linux/cgroup.h>
23struct mem_cgroup;
24struct page_cgroup;
25struct page;
26struct mm_struct;
27
28#ifdef CONFIG_CGROUP_MEM_RES_CTLR
29
30
31
32
33
34
35
36
37
38
39
40extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm,
41 gfp_t gfp_mask);
42
43extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
44 struct page *page, gfp_t mask, struct mem_cgroup **ptr);
45extern void mem_cgroup_commit_charge_swapin(struct page *page,
46 struct mem_cgroup *ptr);
47extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr);
48
49extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
50 gfp_t gfp_mask);
51extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru);
52extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru);
53extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
54extern void mem_cgroup_del_lru(struct page *page);
55extern void mem_cgroup_move_lists(struct page *page,
56 enum lru_list from, enum lru_list to);
57extern void mem_cgroup_uncharge_page(struct page *page);
58extern void mem_cgroup_uncharge_cache_page(struct page *page);
59extern int mem_cgroup_shmem_charge_fallback(struct page *page,
60 struct mm_struct *mm, gfp_t gfp_mask);
61
62extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
63 struct list_head *dst,
64 unsigned long *scanned, int order,
65 int mode, struct zone *z,
66 struct mem_cgroup *mem_cont,
67 int active, int file);
68extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
69int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
70
71extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
72
73static inline
74int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
75{
76 struct mem_cgroup *mem;
77 rcu_read_lock();
78 mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
79 rcu_read_unlock();
80 return cgroup == mem;
81}
82
83extern int
84mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr);
85extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
86 struct page *oldpage, struct page *newpage);
87
88
89
90
91extern int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem);
92extern void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
93 int priority);
94extern void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
95 int priority);
96int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
97int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
98unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
99 struct zone *zone,
100 enum lru_list lru);
101struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
102 struct zone *zone);
103struct zone_reclaim_stat*
104mem_cgroup_get_reclaim_stat_from_page(struct page *page);
105extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,
106 struct task_struct *p);
107
108#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
109extern int do_swap_account;
110#endif
111
112static inline bool mem_cgroup_disabled(void)
113{
114 if (mem_cgroup_subsys.disabled)
115 return true;
116 return false;
117}
118
119extern bool mem_cgroup_oom_called(struct task_struct *task);
120void mem_cgroup_update_mapped_file_stat(struct page *page, int val);
121unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
122 gfp_t gfp_mask, int nid,
123 int zid);
124#else
125struct mem_cgroup;
126
127static inline int mem_cgroup_newpage_charge(struct page *page,
128 struct mm_struct *mm, gfp_t gfp_mask)
129{
130 return 0;
131}
132
133static inline int mem_cgroup_cache_charge(struct page *page,
134 struct mm_struct *mm, gfp_t gfp_mask)
135{
136 return 0;
137}
138
139static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
140 struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr)
141{
142 return 0;
143}
144
145static inline void mem_cgroup_commit_charge_swapin(struct page *page,
146 struct mem_cgroup *ptr)
147{
148}
149
150static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
151{
152}
153
154static inline void mem_cgroup_uncharge_page(struct page *page)
155{
156}
157
158static inline void mem_cgroup_uncharge_cache_page(struct page *page)
159{
160}
161
162static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
163 struct mm_struct *mm, gfp_t gfp_mask)
164{
165 return 0;
166}
167
168static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
169{
170}
171
172static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
173{
174 return ;
175}
176
177static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
178{
179 return ;
180}
181
182static inline void mem_cgroup_del_lru(struct page *page)
183{
184 return ;
185}
186
187static inline void
188mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
189{
190}
191
192static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
193{
194 return 1;
195}
196
197static inline int task_in_mem_cgroup(struct task_struct *task,
198 const struct mem_cgroup *mem)
199{
200 return 1;
201}
202
203static inline int
204mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr)
205{
206 return 0;
207}
208
209static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
210 struct page *oldpage,
211 struct page *newpage)
212{
213}
214
215static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem)
216{
217 return 0;
218}
219
220static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
221 int priority)
222{
223}
224
225static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
226 int priority)
227{
228}
229
230static inline bool mem_cgroup_disabled(void)
231{
232 return true;
233}
234
235static inline bool mem_cgroup_oom_called(struct task_struct *task)
236{
237 return false;
238}
239
240static inline int
241mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
242{
243 return 1;
244}
245
246static inline int
247mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
248{
249 return 1;
250}
251
252static inline unsigned long
253mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
254 enum lru_list lru)
255{
256 return 0;
257}
258
259
260static inline struct zone_reclaim_stat*
261mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone)
262{
263 return NULL;
264}
265
266static inline struct zone_reclaim_stat*
267mem_cgroup_get_reclaim_stat_from_page(struct page *page)
268{
269 return NULL;
270}
271
272static inline void
273mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
274{
275}
276
277static inline void mem_cgroup_update_mapped_file_stat(struct page *page,
278 int val)
279{
280}
281
282static inline
283unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
284 gfp_t gfp_mask, int nid, int zid)
285{
286 return 0;
287}
288
289#endif
290
291#endif
292
293