806b8fa15c5f3402e60c1b21e58422dbf21148a9
[pandora-kernel.git] / include / linux / memcontrol.h
1 /* memcontrol.h - Memory Controller
2  *
3  * Copyright IBM Corporation, 2007
4  * Author Balbir Singh <balbir@linux.vnet.ibm.com>
5  *
6  * Copyright 2007 OpenVZ SWsoft Inc
7  * Author: Pavel Emelianov <xemul@openvz.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  */
19
20 #ifndef _LINUX_MEMCONTROL_H
21 #define _LINUX_MEMCONTROL_H
22 #include <linux/cgroup.h>
23 #include <linux/vm_event_item.h>
24 #include <linux/hardirq.h>
25 #include <linux/jump_label.h>
26
27 struct mem_cgroup;
28 struct page_cgroup;
29 struct page;
30 struct mm_struct;
31 struct kmem_cache;
32
33 /*
34  * The corresponding mem_cgroup_stat_names is defined in mm/memcontrol.c,
35  * These two lists should keep in accord with each other.
36  */
37 enum mem_cgroup_stat_index {
38         /*
39          * For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss.
40          */
41         MEM_CGROUP_STAT_CACHE,          /* # of pages charged as cache */
42         MEM_CGROUP_STAT_RSS,            /* # of pages charged as anon rss */
43         MEM_CGROUP_STAT_RSS_HUGE,       /* # of pages charged as anon huge */
44         MEM_CGROUP_STAT_FILE_MAPPED,    /* # of pages charged as file rss */
45         MEM_CGROUP_STAT_WRITEBACK,      /* # of pages under writeback */
46         MEM_CGROUP_STAT_SWAP,           /* # of pages, swapped out */
47         MEM_CGROUP_STAT_NSTATS,
48 };
49
50 struct mem_cgroup_reclaim_cookie {
51         struct zone *zone;
52         int priority;
53         unsigned int generation;
54 };
55
56 #ifdef CONFIG_MEMCG
57 int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
58                           gfp_t gfp_mask, struct mem_cgroup **memcgp);
59 void mem_cgroup_commit_charge(struct page *page, struct mem_cgroup *memcg,
60                               bool lrucare);
61 void mem_cgroup_cancel_charge(struct page *page, struct mem_cgroup *memcg);
62
63 void mem_cgroup_uncharge(struct page *page);
64
65 /* Batched uncharging */
66 void mem_cgroup_uncharge_start(void);
67 void mem_cgroup_uncharge_end(void);
68
69 void mem_cgroup_migrate(struct page *oldpage, struct page *newpage,
70                         bool lrucare);
71
72 struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *);
73 struct lruvec *mem_cgroup_page_lruvec(struct page *, struct zone *);
74
75 bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg,
76                                   struct mem_cgroup *memcg);
77 bool task_in_mem_cgroup(struct task_struct *task,
78                         const struct mem_cgroup *memcg);
79
80 extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
81 extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
82
83 extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg);
84 extern struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css);
85
86 static inline
87 bool mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *memcg)
88 {
89         struct mem_cgroup *task_memcg;
90         bool match;
91
92         rcu_read_lock();
93         task_memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
94         match = __mem_cgroup_same_or_subtree(memcg, task_memcg);
95         rcu_read_unlock();
96         return match;
97 }
98
99 extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg);
100
101 struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *,
102                                    struct mem_cgroup *,
103                                    struct mem_cgroup_reclaim_cookie *);
104 void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
105
106 /*
107  * For memory reclaim.
108  */
109 int mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec);
110 int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
111 unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list);
112 void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int);
113 extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,
114                                         struct task_struct *p);
115
116 static inline void mem_cgroup_oom_enable(void)
117 {
118         WARN_ON(current->memcg_oom.may_oom);
119         current->memcg_oom.may_oom = 1;
120 }
121
122 static inline void mem_cgroup_oom_disable(void)
123 {
124         WARN_ON(!current->memcg_oom.may_oom);
125         current->memcg_oom.may_oom = 0;
126 }
127
128 static inline bool task_in_memcg_oom(struct task_struct *p)
129 {
130         return p->memcg_oom.memcg;
131 }
132
133 bool mem_cgroup_oom_synchronize(bool wait);
134
135 #ifdef CONFIG_MEMCG_SWAP
136 extern int do_swap_account;
137 #endif
138
139 static inline bool mem_cgroup_disabled(void)
140 {
141         if (memory_cgrp_subsys.disabled)
142                 return true;
143         return false;
144 }
145
146 void __mem_cgroup_begin_update_page_stat(struct page *page, bool *locked,
147                                          unsigned long *flags);
148
149 extern atomic_t memcg_moving;
150
151 static inline void mem_cgroup_begin_update_page_stat(struct page *page,
152                                         bool *locked, unsigned long *flags)
153 {
154         if (mem_cgroup_disabled())
155                 return;
156         rcu_read_lock();
157         *locked = false;
158         if (atomic_read(&memcg_moving))
159                 __mem_cgroup_begin_update_page_stat(page, locked, flags);
160 }
161
162 void __mem_cgroup_end_update_page_stat(struct page *page,
163                                 unsigned long *flags);
164 static inline void mem_cgroup_end_update_page_stat(struct page *page,
165                                         bool *locked, unsigned long *flags)
166 {
167         if (mem_cgroup_disabled())
168                 return;
169         if (*locked)
170                 __mem_cgroup_end_update_page_stat(page, flags);
171         rcu_read_unlock();
172 }
173
174 void mem_cgroup_update_page_stat(struct page *page,
175                                  enum mem_cgroup_stat_index idx,
176                                  int val);
177
178 static inline void mem_cgroup_inc_page_stat(struct page *page,
179                                             enum mem_cgroup_stat_index idx)
180 {
181         mem_cgroup_update_page_stat(page, idx, 1);
182 }
183
184 static inline void mem_cgroup_dec_page_stat(struct page *page,
185                                             enum mem_cgroup_stat_index idx)
186 {
187         mem_cgroup_update_page_stat(page, idx, -1);
188 }
189
190 unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
191                                                 gfp_t gfp_mask,
192                                                 unsigned long *total_scanned);
193
194 void __mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx);
195 static inline void mem_cgroup_count_vm_event(struct mm_struct *mm,
196                                              enum vm_event_item idx)
197 {
198         if (mem_cgroup_disabled())
199                 return;
200         __mem_cgroup_count_vm_event(mm, idx);
201 }
202 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
203 void mem_cgroup_split_huge_fixup(struct page *head);
204 #endif
205
206 #ifdef CONFIG_DEBUG_VM
207 bool mem_cgroup_bad_page_check(struct page *page);
208 void mem_cgroup_print_bad_page(struct page *page);
209 #endif
210 #else /* CONFIG_MEMCG */
211 struct mem_cgroup;
212
213 static inline int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
214                                         gfp_t gfp_mask,
215                                         struct mem_cgroup **memcgp)
216 {
217         *memcgp = NULL;
218         return 0;
219 }
220
221 static inline void mem_cgroup_commit_charge(struct page *page,
222                                             struct mem_cgroup *memcg,
223                                             bool lrucare)
224 {
225 }
226
227 static inline void mem_cgroup_cancel_charge(struct page *page,
228                                             struct mem_cgroup *memcg)
229 {
230 }
231
232 static inline void mem_cgroup_uncharge(struct page *page)
233 {
234 }
235
236 static inline void mem_cgroup_uncharge_start(void)
237 {
238 }
239
240 static inline void mem_cgroup_uncharge_end(void)
241 {
242 }
243
244 static inline void mem_cgroup_migrate(struct page *oldpage,
245                                       struct page *newpage,
246                                       bool lrucare)
247 {
248 }
249
250 static inline struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone,
251                                                     struct mem_cgroup *memcg)
252 {
253         return &zone->lruvec;
254 }
255
256 static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
257                                                     struct zone *zone)
258 {
259         return &zone->lruvec;
260 }
261
262 static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
263 {
264         return NULL;
265 }
266
267 static inline bool mm_match_cgroup(struct mm_struct *mm,
268                 struct mem_cgroup *memcg)
269 {
270         return true;
271 }
272
273 static inline bool task_in_mem_cgroup(struct task_struct *task,
274                                       const struct mem_cgroup *memcg)
275 {
276         return true;
277 }
278
279 static inline struct cgroup_subsys_state
280                 *mem_cgroup_css(struct mem_cgroup *memcg)
281 {
282         return NULL;
283 }
284
285 static inline struct mem_cgroup *
286 mem_cgroup_iter(struct mem_cgroup *root,
287                 struct mem_cgroup *prev,
288                 struct mem_cgroup_reclaim_cookie *reclaim)
289 {
290         return NULL;
291 }
292
293 static inline void mem_cgroup_iter_break(struct mem_cgroup *root,
294                                          struct mem_cgroup *prev)
295 {
296 }
297
298 static inline bool mem_cgroup_disabled(void)
299 {
300         return true;
301 }
302
303 static inline int
304 mem_cgroup_inactive_anon_is_low(struct lruvec *lruvec)
305 {
306         return 1;
307 }
308
309 static inline unsigned long
310 mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru)
311 {
312         return 0;
313 }
314
315 static inline void
316 mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
317                               int increment)
318 {
319 }
320
321 static inline void
322 mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
323 {
324 }
325
326 static inline void mem_cgroup_begin_update_page_stat(struct page *page,
327                                         bool *locked, unsigned long *flags)
328 {
329 }
330
331 static inline void mem_cgroup_end_update_page_stat(struct page *page,
332                                         bool *locked, unsigned long *flags)
333 {
334 }
335
336 static inline void mem_cgroup_oom_enable(void)
337 {
338 }
339
340 static inline void mem_cgroup_oom_disable(void)
341 {
342 }
343
344 static inline bool task_in_memcg_oom(struct task_struct *p)
345 {
346         return false;
347 }
348
349 static inline bool mem_cgroup_oom_synchronize(bool wait)
350 {
351         return false;
352 }
353
354 static inline void mem_cgroup_inc_page_stat(struct page *page,
355                                             enum mem_cgroup_stat_index idx)
356 {
357 }
358
359 static inline void mem_cgroup_dec_page_stat(struct page *page,
360                                             enum mem_cgroup_stat_index idx)
361 {
362 }
363
364 static inline
365 unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
366                                             gfp_t gfp_mask,
367                                             unsigned long *total_scanned)
368 {
369         return 0;
370 }
371
372 static inline void mem_cgroup_split_huge_fixup(struct page *head)
373 {
374 }
375
376 static inline
377 void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx)
378 {
379 }
380 #endif /* CONFIG_MEMCG */
381
382 #if !defined(CONFIG_MEMCG) || !defined(CONFIG_DEBUG_VM)
383 static inline bool
384 mem_cgroup_bad_page_check(struct page *page)
385 {
386         return false;
387 }
388
389 static inline void
390 mem_cgroup_print_bad_page(struct page *page)
391 {
392 }
393 #endif
394
395 enum {
396         UNDER_LIMIT,
397         SOFT_LIMIT,
398         OVER_LIMIT,
399 };
400
401 struct sock;
402 #if defined(CONFIG_INET) && defined(CONFIG_MEMCG_KMEM)
403 void sock_update_memcg(struct sock *sk);
404 void sock_release_memcg(struct sock *sk);
405 #else
406 static inline void sock_update_memcg(struct sock *sk)
407 {
408 }
409 static inline void sock_release_memcg(struct sock *sk)
410 {
411 }
412 #endif /* CONFIG_INET && CONFIG_MEMCG_KMEM */
413
414 #ifdef CONFIG_MEMCG_KMEM
415 extern struct static_key memcg_kmem_enabled_key;
416
417 extern int memcg_limited_groups_array_size;
418
419 /*
420  * Helper macro to loop through all memcg-specific caches. Callers must still
421  * check if the cache is valid (it is either valid or NULL).
422  * the slab_mutex must be held when looping through those caches
423  */
424 #define for_each_memcg_cache_index(_idx)        \
425         for ((_idx) = 0; (_idx) < memcg_limited_groups_array_size; (_idx)++)
426
427 static inline bool memcg_kmem_enabled(void)
428 {
429         return static_key_false(&memcg_kmem_enabled_key);
430 }
431
432 /*
433  * In general, we'll do everything in our power to not incur in any overhead
434  * for non-memcg users for the kmem functions. Not even a function call, if we
435  * can avoid it.
436  *
437  * Therefore, we'll inline all those functions so that in the best case, we'll
438  * see that kmemcg is off for everybody and proceed quickly.  If it is on,
439  * we'll still do most of the flag checking inline. We check a lot of
440  * conditions, but because they are pretty simple, they are expected to be
441  * fast.
442  */
443 bool __memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg,
444                                         int order);
445 void __memcg_kmem_commit_charge(struct page *page,
446                                        struct mem_cgroup *memcg, int order);
447 void __memcg_kmem_uncharge_pages(struct page *page, int order);
448
449 int memcg_cache_id(struct mem_cgroup *memcg);
450
451 int memcg_alloc_cache_params(struct mem_cgroup *memcg, struct kmem_cache *s,
452                              struct kmem_cache *root_cache);
453 void memcg_free_cache_params(struct kmem_cache *s);
454
455 int memcg_update_cache_size(struct kmem_cache *s, int num_groups);
456 void memcg_update_array_size(int num_groups);
457
458 struct kmem_cache *
459 __memcg_kmem_get_cache(struct kmem_cache *cachep, gfp_t gfp);
460
461 int __memcg_charge_slab(struct kmem_cache *cachep, gfp_t gfp, int order);
462 void __memcg_uncharge_slab(struct kmem_cache *cachep, int order);
463
464 int __memcg_cleanup_cache_params(struct kmem_cache *s);
465
466 /**
467  * memcg_kmem_newpage_charge: verify if a new kmem allocation is allowed.
468  * @gfp: the gfp allocation flags.
469  * @memcg: a pointer to the memcg this was charged against.
470  * @order: allocation order.
471  *
472  * returns true if the memcg where the current task belongs can hold this
473  * allocation.
474  *
475  * We return true automatically if this allocation is not to be accounted to
476  * any memcg.
477  */
478 static inline bool
479 memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg, int order)
480 {
481         if (!memcg_kmem_enabled())
482                 return true;
483
484         /*
485          * __GFP_NOFAIL allocations will move on even if charging is not
486          * possible. Therefore we don't even try, and have this allocation
487          * unaccounted. We could in theory charge it with
488          * res_counter_charge_nofail, but we hope those allocations are rare,
489          * and won't be worth the trouble.
490          */
491         if (gfp & __GFP_NOFAIL)
492                 return true;
493         if (in_interrupt() || (!current->mm) || (current->flags & PF_KTHREAD))
494                 return true;
495
496         /* If the test is dying, just let it go. */
497         if (unlikely(fatal_signal_pending(current)))
498                 return true;
499
500         return __memcg_kmem_newpage_charge(gfp, memcg, order);
501 }
502
503 /**
504  * memcg_kmem_uncharge_pages: uncharge pages from memcg
505  * @page: pointer to struct page being freed
506  * @order: allocation order.
507  *
508  * there is no need to specify memcg here, since it is embedded in page_cgroup
509  */
510 static inline void
511 memcg_kmem_uncharge_pages(struct page *page, int order)
512 {
513         if (memcg_kmem_enabled())
514                 __memcg_kmem_uncharge_pages(page, order);
515 }
516
517 /**
518  * memcg_kmem_commit_charge: embeds correct memcg in a page
519  * @page: pointer to struct page recently allocated
520  * @memcg: the memcg structure we charged against
521  * @order: allocation order.
522  *
523  * Needs to be called after memcg_kmem_newpage_charge, regardless of success or
524  * failure of the allocation. if @page is NULL, this function will revert the
525  * charges. Otherwise, it will commit the memcg given by @memcg to the
526  * corresponding page_cgroup.
527  */
528 static inline void
529 memcg_kmem_commit_charge(struct page *page, struct mem_cgroup *memcg, int order)
530 {
531         if (memcg_kmem_enabled() && memcg)
532                 __memcg_kmem_commit_charge(page, memcg, order);
533 }
534
535 /**
536  * memcg_kmem_get_cache: selects the correct per-memcg cache for allocation
537  * @cachep: the original global kmem cache
538  * @gfp: allocation flags.
539  *
540  * All memory allocated from a per-memcg cache is charged to the owner memcg.
541  */
542 static __always_inline struct kmem_cache *
543 memcg_kmem_get_cache(struct kmem_cache *cachep, gfp_t gfp)
544 {
545         if (!memcg_kmem_enabled())
546                 return cachep;
547         if (gfp & __GFP_NOFAIL)
548                 return cachep;
549         if (in_interrupt() || (!current->mm) || (current->flags & PF_KTHREAD))
550                 return cachep;
551         if (unlikely(fatal_signal_pending(current)))
552                 return cachep;
553
554         return __memcg_kmem_get_cache(cachep, gfp);
555 }
556 #else
557 #define for_each_memcg_cache_index(_idx)        \
558         for (; NULL; )
559
560 static inline bool memcg_kmem_enabled(void)
561 {
562         return false;
563 }
564
565 static inline bool
566 memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg, int order)
567 {
568         return true;
569 }
570
571 static inline void memcg_kmem_uncharge_pages(struct page *page, int order)
572 {
573 }
574
575 static inline void
576 memcg_kmem_commit_charge(struct page *page, struct mem_cgroup *memcg, int order)
577 {
578 }
579
580 static inline int memcg_cache_id(struct mem_cgroup *memcg)
581 {
582         return -1;
583 }
584
585 static inline int memcg_alloc_cache_params(struct mem_cgroup *memcg,
586                 struct kmem_cache *s, struct kmem_cache *root_cache)
587 {
588         return 0;
589 }
590
591 static inline void memcg_free_cache_params(struct kmem_cache *s)
592 {
593 }
594
595 static inline struct kmem_cache *
596 memcg_kmem_get_cache(struct kmem_cache *cachep, gfp_t gfp)
597 {
598         return cachep;
599 }
600 #endif /* CONFIG_MEMCG_KMEM */
601 #endif /* _LINUX_MEMCONTROL_H */
602