aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/memcontrol.h
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /include/linux/memcontrol.h
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'include/linux/memcontrol.h')
-rw-r--r--include/linux/memcontrol.h102
1 files changed, 87 insertions, 15 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 159a0762aeaf..50940da6adf3 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -20,11 +20,18 @@
20#ifndef _LINUX_MEMCONTROL_H 20#ifndef _LINUX_MEMCONTROL_H
21#define _LINUX_MEMCONTROL_H 21#define _LINUX_MEMCONTROL_H
22#include <linux/cgroup.h> 22#include <linux/cgroup.h>
23#include <linux/vm_event_item.h>
24
23struct mem_cgroup; 25struct mem_cgroup;
24struct page_cgroup; 26struct page_cgroup;
25struct page; 27struct page;
26struct mm_struct; 28struct mm_struct;
27 29
30/* Stats that can be updated by kernel. */
31enum mem_cgroup_page_stat_item {
32 MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */
33};
34
28extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, 35extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
29 struct list_head *dst, 36 struct list_head *dst,
30 unsigned long *scanned, int order, 37 unsigned long *scanned, int order,
@@ -57,6 +64,7 @@ extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
57 gfp_t gfp_mask); 64 gfp_t gfp_mask);
58extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru); 65extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru);
59extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru); 66extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru);
67extern void mem_cgroup_rotate_reclaimable_page(struct page *page);
60extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru); 68extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
61extern void mem_cgroup_del_lru(struct page *page); 69extern void mem_cgroup_del_lru(struct page *page);
62extern void mem_cgroup_move_lists(struct page *page, 70extern void mem_cgroup_move_lists(struct page *page,
@@ -76,6 +84,7 @@ int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
76 84
77extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); 85extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
78extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); 86extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
87extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm);
79 88
80static inline 89static inline
81int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) 90int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
@@ -91,18 +100,19 @@ extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem);
91 100
92extern int 101extern int
93mem_cgroup_prepare_migration(struct page *page, 102mem_cgroup_prepare_migration(struct page *page,
94 struct page *newpage, struct mem_cgroup **ptr); 103 struct page *newpage, struct mem_cgroup **ptr, gfp_t gfp_mask);
95extern void mem_cgroup_end_migration(struct mem_cgroup *mem, 104extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
96 struct page *oldpage, struct page *newpage); 105 struct page *oldpage, struct page *newpage, bool migration_ok);
97 106
98/* 107/*
99 * For memory reclaim. 108 * For memory reclaim.
100 */ 109 */
101int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg); 110int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
102int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg); 111int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
103unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, 112int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
104 struct zone *zone, 113unsigned long mem_cgroup_zone_nr_lru_pages(struct mem_cgroup *memcg,
105 enum lru_list lru); 114 struct zone *zone,
115 enum lru_list lru);
106struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, 116struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
107 struct zone *zone); 117 struct zone *zone);
108struct zone_reclaim_stat* 118struct zone_reclaim_stat*
@@ -121,11 +131,36 @@ static inline bool mem_cgroup_disabled(void)
121 return false; 131 return false;
122} 132}
123 133
124void mem_cgroup_update_file_mapped(struct page *page, int val); 134void mem_cgroup_update_page_stat(struct page *page,
135 enum mem_cgroup_page_stat_item idx,
136 int val);
137
138static inline void mem_cgroup_inc_page_stat(struct page *page,
139 enum mem_cgroup_page_stat_item idx)
140{
141 mem_cgroup_update_page_stat(page, idx, 1);
142}
143
144static inline void mem_cgroup_dec_page_stat(struct page *page,
145 enum mem_cgroup_page_stat_item idx)
146{
147 mem_cgroup_update_page_stat(page, idx, -1);
148}
149
125unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, 150unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
126 gfp_t gfp_mask); 151 gfp_t gfp_mask,
152 unsigned long *total_scanned);
127u64 mem_cgroup_get_limit(struct mem_cgroup *mem); 153u64 mem_cgroup_get_limit(struct mem_cgroup *mem);
128 154
155void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx);
156#ifdef CONFIG_TRANSPARENT_HUGEPAGE
157void mem_cgroup_split_huge_fixup(struct page *head, struct page *tail);
158#endif
159
160#ifdef CONFIG_DEBUG_VM
161bool mem_cgroup_bad_page_check(struct page *page);
162void mem_cgroup_print_bad_page(struct page *page);
163#endif
129#else /* CONFIG_CGROUP_MEM_RES_CTLR */ 164#else /* CONFIG_CGROUP_MEM_RES_CTLR */
130struct mem_cgroup; 165struct mem_cgroup;
131 166
@@ -187,6 +222,11 @@ static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
187 return ; 222 return ;
188} 223}
189 224
225static inline void mem_cgroup_rotate_reclaimable_page(struct page *page)
226{
227 return ;
228}
229
190static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru) 230static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
191{ 231{
192 return ; 232 return ;
@@ -207,6 +247,11 @@ static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
207 return NULL; 247 return NULL;
208} 248}
209 249
250static inline struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm)
251{
252 return NULL;
253}
254
210static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem) 255static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
211{ 256{
212 return 1; 257 return 1;
@@ -225,14 +270,13 @@ static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
225 270
226static inline int 271static inline int
227mem_cgroup_prepare_migration(struct page *page, struct page *newpage, 272mem_cgroup_prepare_migration(struct page *page, struct page *newpage,
228 struct mem_cgroup **ptr) 273 struct mem_cgroup **ptr, gfp_t gfp_mask)
229{ 274{
230 return 0; 275 return 0;
231} 276}
232 277
233static inline void mem_cgroup_end_migration(struct mem_cgroup *mem, 278static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
234 struct page *oldpage, 279 struct page *oldpage, struct page *newpage, bool migration_ok)
235 struct page *newpage)
236{ 280{
237} 281}
238 282
@@ -269,8 +313,8 @@ mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
269} 313}
270 314
271static inline unsigned long 315static inline unsigned long
272mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone, 316mem_cgroup_zone_nr_lru_pages(struct mem_cgroup *memcg, struct zone *zone,
273 enum lru_list lru) 317 enum lru_list lru)
274{ 318{
275 return 0; 319 return 0;
276} 320}
@@ -293,14 +337,20 @@ mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
293{ 337{
294} 338}
295 339
296static inline void mem_cgroup_update_file_mapped(struct page *page, 340static inline void mem_cgroup_inc_page_stat(struct page *page,
297 int val) 341 enum mem_cgroup_page_stat_item idx)
342{
343}
344
345static inline void mem_cgroup_dec_page_stat(struct page *page,
346 enum mem_cgroup_page_stat_item idx)
298{ 347{
299} 348}
300 349
301static inline 350static inline
302unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, 351unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
303 gfp_t gfp_mask) 352 gfp_t gfp_mask,
353 unsigned long *total_scanned)
304{ 354{
305 return 0; 355 return 0;
306} 356}
@@ -311,7 +361,29 @@ u64 mem_cgroup_get_limit(struct mem_cgroup *mem)
311 return 0; 361 return 0;
312} 362}
313 363
364static inline void mem_cgroup_split_huge_fixup(struct page *head,
365 struct page *tail)
366{
367}
368
369static inline
370void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx)
371{
372}
314#endif /* CONFIG_CGROUP_MEM_CONT */ 373#endif /* CONFIG_CGROUP_MEM_CONT */
315 374
375#if !defined(CONFIG_CGROUP_MEM_RES_CTLR) || !defined(CONFIG_DEBUG_VM)
376static inline bool
377mem_cgroup_bad_page_check(struct page *page)
378{
379 return false;
380}
381
382static inline void
383mem_cgroup_print_bad_page(struct page *page)
384{
385}
386#endif
387
316#endif /* _LINUX_MEMCONTROL_H */ 388#endif /* _LINUX_MEMCONTROL_H */
317 389