Blame view

include/linux/memcontrol.h 8.07 KB
8cdea7c05   Balbir Singh   Memory controller...
1
2
3
4
5
  /* memcontrol.h - Memory Controller
   *
   * Copyright IBM Corporation, 2007
   * Author Balbir Singh <balbir@linux.vnet.ibm.com>
   *
78fb74669   Pavel Emelianov   Memory controller...
6
7
8
   * Copyright 2007 OpenVZ SWsoft Inc
   * Author: Pavel Emelianov <xemul@openvz.org>
   *
8cdea7c05   Balbir Singh   Memory controller...
9
10
11
12
13
14
15
16
17
18
19
20
21
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   */
  
  #ifndef _LINUX_MEMCONTROL_H
  #define _LINUX_MEMCONTROL_H
f8d665422   Hirokazu Takahashi   memcg: add mem_cg...
22
  #include <linux/cgroup.h>
78fb74669   Pavel Emelianov   Memory controller...
23
24
  struct mem_cgroup;
  struct page_cgroup;
8697d3319   Balbir Singh   Memory controller...
25
26
  struct page;
  struct mm_struct;
78fb74669   Pavel Emelianov   Memory controller...
27

8b25c6d22   Johannes Weiner   vmscan: remove is...
28
29
30
31
32
33
  extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
  					struct list_head *dst,
  					unsigned long *scanned, int order,
  					int mode, struct zone *z,
  					struct mem_cgroup *mem_cont,
  					int active, int file);
00f0b8259   Balbir Singh   Memory controller...
34
  #ifdef CONFIG_CGROUP_MEM_RES_CTLR
2c26fdd70   KAMEZAWA Hiroyuki   memcg: revert gfp...
35
36
37
38
39
40
41
42
43
44
  /*
   * All "charge" functions with gfp_mask should use GFP_KERNEL or
   * (gfp_mask & GFP_RECLAIM_MASK). In current implementatin, memcg doesn't
   * alloc memory but reclaims memory from all available zones. So, "where I want
   * memory from" bits of gfp_mask has no meaning. So any bits of that field is
   * available but adding a rule is better. charge functions' gfp_mask should
   * be set to GFP_KERNEL or gfp_mask & GFP_RECLAIM_MASK for avoiding ambiguous
   * codes.
   * (Of course, if memcg does memory allocation in future, GFP_KERNEL is sane.)
   */
78fb74669   Pavel Emelianov   Memory controller...
45

7a81b88cb   KAMEZAWA Hiroyuki   memcg: introduce ...
46
  extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm,
e1a1cd590   Balbir Singh   Memory controller...
47
  				gfp_t gfp_mask);
7a81b88cb   KAMEZAWA Hiroyuki   memcg: introduce ...
48
  /* for swap handling */
8c7c6e34a   KAMEZAWA Hiroyuki   memcg: mem+swap c...
49
50
  extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
  		struct page *page, gfp_t mask, struct mem_cgroup **ptr);
7a81b88cb   KAMEZAWA Hiroyuki   memcg: introduce ...
51
52
53
  extern void mem_cgroup_commit_charge_swapin(struct page *page,
  					struct mem_cgroup *ptr);
  extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr);
8289546e5   Hugh Dickins   memcg: remove mem...
54
55
  extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
  					gfp_t gfp_mask);
08e552c69   KAMEZAWA Hiroyuki   memcg: synchroniz...
56
57
58
59
60
61
  extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru);
  extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru);
  extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
  extern void mem_cgroup_del_lru(struct page *page);
  extern void mem_cgroup_move_lists(struct page *page,
  				  enum lru_list from, enum lru_list to);
569b846df   KAMEZAWA Hiroyuki   memcg: coalesce u...
62
63
64
65
  
  /* For coalescing uncharge for reducing memcg' overhead*/
  extern void mem_cgroup_uncharge_start(void);
  extern void mem_cgroup_uncharge_end(void);
3c541e14b   Balbir Singh   Memory controller...
66
  extern void mem_cgroup_uncharge_page(struct page *page);
69029cd55   KAMEZAWA Hiroyuki   memcg: remove ref...
67
  extern void mem_cgroup_uncharge_cache_page(struct page *page);
ae3abae64   Daisuke Nishimura   memcg: fix mem_cg...
68
  extern int mem_cgroup_shmem_charge_fallback(struct page *page,
b5a84319a   KAMEZAWA Hiroyuki   memcg: fix shmem'...
69
  			struct mm_struct *mm, gfp_t gfp_mask);
c9b0ed514   KAMEZAWA Hiroyuki   memcg: helper fun...
70

c7ba5c9e8   Pavel Emelianov   Memory controller...
71
  extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
4c4a22148   David Rientjes   memcontrol: move ...
72
  int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
3062fc67d   David Rientjes   memcontrol: move ...
73

e42d9d5d4   Wu Fengguang   memcg: rename and...
74
  extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
cf475ad28   Balbir Singh   cgroups: add an o...
75
  extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
2e4d40915   Lai Jiangshan   memcontrol: rcu_r...
76
77
78
79
80
  static inline
  int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
  {
  	struct mem_cgroup *mem;
  	rcu_read_lock();
e638c1394   KAMEZAWA Hiroyuki   memcg: use rcu_de...
81
  	mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
2e4d40915   Lai Jiangshan   memcontrol: rcu_r...
82
83
84
  	rcu_read_unlock();
  	return cgroup == mem;
  }
8a9f3ccd2   Balbir Singh   Memory controller...
85

d324236b3   Wu Fengguang   memcg: add access...
86
  extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem);
e8589cc18   KAMEZAWA Hiroyuki   memcg: better mig...
87
  extern int
ac39cf8cb   akpm@linux-foundation.org   memcg: fix mis-ac...
88
89
  mem_cgroup_prepare_migration(struct page *page,
  	struct page *newpage, struct mem_cgroup **ptr);
01b1ae63c   KAMEZAWA Hiroyuki   memcg: simple mig...
90
91
  extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
  	struct page *oldpage, struct page *newpage);
ae41be374   KAMEZAWA Hiroyuki   bugfix for memory...
92

58ae83db2   KAMEZAWA Hiroyuki   per-zone and recl...
93
94
95
  /*
   * For memory reclaim.
   */
c772be939   KOSAKI Motohiro   memcg: fix calcul...
96
  int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
56e49d218   Rik van Riel   vmscan: evict use...
97
  int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
a3d8e0549   KOSAKI Motohiro   memcg: add mem_cg...
98
99
100
  unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
  				       struct zone *zone,
  				       enum lru_list lru);
3e2f41f1f   KOSAKI Motohiro   memcg: add zone_r...
101
102
103
104
  struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
  						      struct zone *zone);
  struct zone_reclaim_stat*
  mem_cgroup_get_reclaim_stat_from_page(struct page *page);
e222432bf   Balbir Singh   memcg: show memcg...
105
106
  extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,
  					struct task_struct *p);
58ae83db2   KAMEZAWA Hiroyuki   per-zone and recl...
107

c077719be   KAMEZAWA Hiroyuki   memcg: mem+swap c...
108
109
110
  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
  extern int do_swap_account;
  #endif
f8d665422   Hirokazu Takahashi   memcg: add mem_cg...
111
112
113
114
115
116
117
  
  static inline bool mem_cgroup_disabled(void)
  {
  	if (mem_cgroup_subsys.disabled)
  		return true;
  	return false;
  }
d8046582d   KAMEZAWA Hiroyuki   memcg: make memcg...
118
  void mem_cgroup_update_file_mapped(struct page *page, int val);
4e4169535   Balbir Singh   memory controller...
119
  unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
00918b6ab   KOSAKI Motohiro   memcg: remove nid...
120
  						gfp_t gfp_mask);
a63d83f42   David Rientjes   oom: badness heur...
121
  u64 mem_cgroup_get_limit(struct mem_cgroup *mem);
52d4b9ac0   KAMEZAWA Hiroyuki   memcg: allocate a...
122
  #else /* CONFIG_CGROUP_MEM_RES_CTLR */
7a81b88cb   KAMEZAWA Hiroyuki   memcg: introduce ...
123
124
125
  struct mem_cgroup;
  
  static inline int mem_cgroup_newpage_charge(struct page *page,
8289546e5   Hugh Dickins   memcg: remove mem...
126
  					struct mm_struct *mm, gfp_t gfp_mask)
8a9f3ccd2   Balbir Singh   Memory controller...
127
128
129
  {
  	return 0;
  }
8289546e5   Hugh Dickins   memcg: remove mem...
130
131
  static inline int mem_cgroup_cache_charge(struct page *page,
  					struct mm_struct *mm, gfp_t gfp_mask)
8a9f3ccd2   Balbir Singh   Memory controller...
132
  {
8289546e5   Hugh Dickins   memcg: remove mem...
133
  	return 0;
8a9f3ccd2   Balbir Singh   Memory controller...
134
  }
8c7c6e34a   KAMEZAWA Hiroyuki   memcg: mem+swap c...
135
136
  static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
  		struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr)
7a81b88cb   KAMEZAWA Hiroyuki   memcg: introduce ...
137
138
139
140
141
142
143
144
145
146
147
148
  {
  	return 0;
  }
  
  static inline void mem_cgroup_commit_charge_swapin(struct page *page,
  					  struct mem_cgroup *ptr)
  {
  }
  
  static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
  {
  }
569b846df   KAMEZAWA Hiroyuki   memcg: coalesce u...
149
150
151
152
153
154
155
  static inline void mem_cgroup_uncharge_start(void)
  {
  }
  
  static inline void mem_cgroup_uncharge_end(void)
  {
  }
8a9f3ccd2   Balbir Singh   Memory controller...
156
157
158
  static inline void mem_cgroup_uncharge_page(struct page *page)
  {
  }
69029cd55   KAMEZAWA Hiroyuki   memcg: remove ref...
159
160
161
  static inline void mem_cgroup_uncharge_cache_page(struct page *page)
  {
  }
ae3abae64   Daisuke Nishimura   memcg: fix mem_cg...
162
  static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
b5a84319a   KAMEZAWA Hiroyuki   memcg: fix shmem'...
163
  			struct mm_struct *mm, gfp_t gfp_mask)
c9b0ed514   KAMEZAWA Hiroyuki   memcg: helper fun...
164
165
166
  {
  	return 0;
  }
08e552c69   KAMEZAWA Hiroyuki   memcg: synchroniz...
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
  {
  }
  
  static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
  {
  	return ;
  }
  
  static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
  {
  	return ;
  }
  
  static inline void mem_cgroup_del_lru(struct page *page)
  {
  	return ;
  }
  
  static inline void
  mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
66e1707bc   Balbir Singh   Memory controller...
188
189
  {
  }
e42d9d5d4   Wu Fengguang   memcg: rename and...
190
191
192
193
  static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
  {
  	return NULL;
  }
bd845e38c   Hugh Dickins   memcg: mm_match_c...
194
  static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
bed7161a5   Balbir Singh   Memory controller...
195
  {
60c12b120   David Rientjes   memcontrol: add v...
196
  	return 1;
bed7161a5   Balbir Singh   Memory controller...
197
  }
4c4a22148   David Rientjes   memcontrol: move ...
198
199
200
201
202
  static inline int task_in_mem_cgroup(struct task_struct *task,
  				     const struct mem_cgroup *mem)
  {
  	return 1;
  }
d324236b3   Wu Fengguang   memcg: add access...
203
204
205
206
  static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
  {
  	return NULL;
  }
e8589cc18   KAMEZAWA Hiroyuki   memcg: better mig...
207
  static inline int
ac39cf8cb   akpm@linux-foundation.org   memcg: fix mis-ac...
208
209
  mem_cgroup_prepare_migration(struct page *page, struct page *newpage,
  	struct mem_cgroup **ptr)
ae41be374   KAMEZAWA Hiroyuki   bugfix for memory...
210
211
212
  {
  	return 0;
  }
01b1ae63c   KAMEZAWA Hiroyuki   memcg: simple mig...
213
214
215
  static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
  					struct page *oldpage,
  					struct page *newpage)
ae41be374   KAMEZAWA Hiroyuki   bugfix for memory...
216
217
  {
  }
6c48a1d04   KAMEZAWA Hiroyuki   per-zone and recl...
218
219
220
221
222
223
224
225
226
227
228
229
230
231
  static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem)
  {
  	return 0;
  }
  
  static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
  						int priority)
  {
  }
  
  static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
  						int priority)
  {
  }
f8d665422   Hirokazu Takahashi   memcg: add mem_cg...
232
233
234
235
  static inline bool mem_cgroup_disabled(void)
  {
  	return true;
  }
a636b327f   KAMEZAWA Hiroyuki   memcg: avoid unne...
236

14797e236   KOSAKI Motohiro   memcg: add inacti...
237
  static inline int
c772be939   KOSAKI Motohiro   memcg: fix calcul...
238
  mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
14797e236   KOSAKI Motohiro   memcg: add inacti...
239
240
241
  {
  	return 1;
  }
56e49d218   Rik van Riel   vmscan: evict use...
242
243
244
245
246
  static inline int
  mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
  {
  	return 1;
  }
a3d8e0549   KOSAKI Motohiro   memcg: add mem_cg...
247
248
249
250
251
252
  static inline unsigned long
  mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
  			 enum lru_list lru)
  {
  	return 0;
  }
3e2f41f1f   KOSAKI Motohiro   memcg: add zone_r...
253
254
255
256
257
258
259
260
261
262
263
  static inline struct zone_reclaim_stat*
  mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone)
  {
  	return NULL;
  }
  
  static inline struct zone_reclaim_stat*
  mem_cgroup_get_reclaim_stat_from_page(struct page *page)
  {
  	return NULL;
  }
e222432bf   Balbir Singh   memcg: show memcg...
264
265
266
267
  static inline void
  mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
  {
  }
d8046582d   KAMEZAWA Hiroyuki   memcg: make memcg...
268
  static inline void mem_cgroup_update_file_mapped(struct page *page,
d69b042f3   Balbir Singh   memcg: add file-b...
269
270
271
  							int val)
  {
  }
4e4169535   Balbir Singh   memory controller...
272
273
  static inline
  unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
00918b6ab   KOSAKI Motohiro   memcg: remove nid...
274
  					    gfp_t gfp_mask)
4e4169535   Balbir Singh   memory controller...
275
276
277
  {
  	return 0;
  }
a63d83f42   David Rientjes   oom: badness heur...
278
279
280
281
282
  static inline
  u64 mem_cgroup_get_limit(struct mem_cgroup *mem)
  {
  	return 0;
  }
78fb74669   Pavel Emelianov   Memory controller...
283
  #endif /* CONFIG_CGROUP_MEM_CONT */
8cdea7c05   Balbir Singh   Memory controller...
284
  #endif /* _LINUX_MEMCONTROL_H */