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
29enum mem_cgroup_page_stat_item {
30 MEMCG_NR_FILE_MAPPED,
31};
32
33extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
34 struct list_head *dst,
35 unsigned long *scanned, int order,
36 int mode, struct zone *z,
37 struct mem_cgroup *mem_cont,
38 int active, int file);
39
40#ifdef CONFIG_CGROUP_MEM_RES_CTLR
41
42
43
44
45
46
47
48
49
50
51
52extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm,
53 gfp_t gfp_mask);
54
55extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
56 struct page *page, gfp_t mask, struct mem_cgroup **ptr);
57extern void mem_cgroup_commit_charge_swapin(struct page *page,
58 struct mem_cgroup *ptr);
59extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr);
60
61extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
62 gfp_t gfp_mask);
63extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru);
64extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru);
65extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
66extern void mem_cgroup_del_lru(struct page *page);
67extern void mem_cgroup_move_lists(struct page *page,
68 enum lru_list from, enum lru_list to);
69
70
71extern void mem_cgroup_uncharge_start(void);
72extern void mem_cgroup_uncharge_end(void);
73
74extern void mem_cgroup_uncharge_page(struct page *page);
75extern void mem_cgroup_uncharge_cache_page(struct page *page);
76extern int mem_cgroup_shmem_charge_fallback(struct page *page,
77 struct mm_struct *mm, gfp_t gfp_mask);
78
79extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
80int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
81
82extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
83extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
84
85static inline
86int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
87{
88 struct mem_cgroup *mem;
89 rcu_read_lock();
90 mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
91 rcu_read_unlock();
92 return cgroup == mem;
93}
94
95extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem);
96
97extern int
98mem_cgroup_prepare_migration(struct page *page,
99 struct page *newpage, struct mem_cgroup **ptr);
100extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
101 struct page *oldpage, struct page *newpage, bool migration_ok);
102
103
104
105
106int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
107int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
108unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
109 struct zone *zone,
110 enum lru_list lru);
111struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
112 struct zone *zone);
113struct zone_reclaim_stat*
114mem_cgroup_get_reclaim_stat_from_page(struct page *page);
115extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,
116 struct task_struct *p);
117
118#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
119extern int do_swap_account;
120#endif
121
122static inline bool mem_cgroup_disabled(void)
123{
124 if (mem_cgroup_subsys.disabled)
125 return true;
126 return false;
127}
128
129void mem_cgroup_update_page_stat(struct page *page,
130 enum mem_cgroup_page_stat_item idx,
131 int val);
132
133static inline void mem_cgroup_inc_page_stat(struct page *page,
134 enum mem_cgroup_page_stat_item idx)
135{
136 mem_cgroup_update_page_stat(page, idx, 1);
137}
138
139static inline void mem_cgroup_dec_page_stat(struct page *page,
140 enum mem_cgroup_page_stat_item idx)
141{
142 mem_cgroup_update_page_stat(page, idx, -1);
143}
144
145unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
146 gfp_t gfp_mask);
147u64 mem_cgroup_get_limit(struct mem_cgroup *mem);
148
149#ifdef CONFIG_TRANSPARENT_HUGEPAGE
150void mem_cgroup_split_huge_fixup(struct page *head, struct page *tail);
151#endif
152
153#else
154struct mem_cgroup;
155
156static inline int mem_cgroup_newpage_charge(struct page *page,
157 struct mm_struct *mm, gfp_t gfp_mask)
158{
159 return 0;
160}
161
162static inline int mem_cgroup_cache_charge(struct page *page,
163 struct mm_struct *mm, gfp_t gfp_mask)
164{
165 return 0;
166}
167
168static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
169 struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr)
170{
171 return 0;
172}
173
174static inline void mem_cgroup_commit_charge_swapin(struct page *page,
175 struct mem_cgroup *ptr)
176{
177}
178
179static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
180{
181}
182
183static inline void mem_cgroup_uncharge_start(void)
184{
185}
186
187static inline void mem_cgroup_uncharge_end(void)
188{
189}
190
191static inline void mem_cgroup_uncharge_page(struct page *page)
192{
193}
194
195static inline void mem_cgroup_uncharge_cache_page(struct page *page)
196{
197}
198
199static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
200 struct mm_struct *mm, gfp_t gfp_mask)
201{
202 return 0;
203}
204
205static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
206{
207}
208
209static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
210{
211 return ;
212}
213
214static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
215{
216 return ;
217}
218
219static inline void mem_cgroup_del_lru(struct page *page)
220{
221 return ;
222}
223
224static inline void
225mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
226{
227}
228
229static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
230{
231 return NULL;
232}
233
234static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
235{
236 return 1;
237}
238
239static inline int task_in_mem_cgroup(struct task_struct *task,
240 const struct mem_cgroup *mem)
241{
242 return 1;
243}
244
245static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
246{
247 return NULL;
248}
249
250static inline int
251mem_cgroup_prepare_migration(struct page *page, struct page *newpage,
252 struct mem_cgroup **ptr)
253{
254 return 0;
255}
256
257static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
258 struct page *oldpage, struct page *newpage, bool migration_ok)
259{
260}
261
262static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem)
263{
264 return 0;
265}
266
267static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
268 int priority)
269{
270}
271
272static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
273 int priority)
274{
275}
276
277static inline bool mem_cgroup_disabled(void)
278{
279 return true;
280}
281
282static inline int
283mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
284{
285 return 1;
286}
287
288static inline int
289mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
290{
291 return 1;
292}
293
294static inline unsigned long
295mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
296 enum lru_list lru)
297{
298 return 0;
299}
300
301
302static inline struct zone_reclaim_stat*
303mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone)
304{
305 return NULL;
306}
307
308static inline struct zone_reclaim_stat*
309mem_cgroup_get_reclaim_stat_from_page(struct page *page)
310{
311 return NULL;
312}
313
314static inline void
315mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
316{
317}
318
319static inline void mem_cgroup_inc_page_stat(struct page *page,
320 enum mem_cgroup_page_stat_item idx)
321{
322}
323
324static inline void mem_cgroup_dec_page_stat(struct page *page,
325 enum mem_cgroup_page_stat_item idx)
326{
327}
328
329static inline
330unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
331 gfp_t gfp_mask)
332{
333 return 0;
334}
335
336static inline
337u64 mem_cgroup_get_limit(struct mem_cgroup *mem)
338{
339 return 0;
340}
341
342static inline void mem_cgroup_split_huge_fixup(struct page *head,
343 struct page *tail)
344{
345}
346
347#endif
348
349#endif
350
351