diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /include/linux/memcontrol.h | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (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.h | 102 |
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 | |||
23 | struct mem_cgroup; | 25 | struct mem_cgroup; |
24 | struct page_cgroup; | 26 | struct page_cgroup; |
25 | struct page; | 27 | struct page; |
26 | struct mm_struct; | 28 | struct mm_struct; |
27 | 29 | ||
30 | /* Stats that can be updated by kernel. */ | ||
31 | enum mem_cgroup_page_stat_item { | ||
32 | MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */ | ||
33 | }; | ||
34 | |||
28 | extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | 35 | extern 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); |
58 | extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru); | 65 | extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru); |
59 | extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru); | 66 | extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru); |
67 | extern void mem_cgroup_rotate_reclaimable_page(struct page *page); | ||
60 | extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru); | 68 | extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru); |
61 | extern void mem_cgroup_del_lru(struct page *page); | 69 | extern void mem_cgroup_del_lru(struct page *page); |
62 | extern void mem_cgroup_move_lists(struct page *page, | 70 | extern 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 | ||
77 | extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); | 85 | extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); |
78 | extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); | 86 | extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); |
87 | extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm); | ||
79 | 88 | ||
80 | static inline | 89 | static inline |
81 | int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) | 90 | int 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 | ||
92 | extern int | 101 | extern int |
93 | mem_cgroup_prepare_migration(struct page *page, | 102 | mem_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); |
95 | extern void mem_cgroup_end_migration(struct mem_cgroup *mem, | 104 | extern 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 | */ |
101 | int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg); | 110 | int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg); |
102 | int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg); | 111 | int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg); |
103 | unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, | 112 | int mem_cgroup_select_victim_node(struct mem_cgroup *memcg); |
104 | struct zone *zone, | 113 | unsigned 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); | ||
106 | struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, | 116 | struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, |
107 | struct zone *zone); | 117 | struct zone *zone); |
108 | struct zone_reclaim_stat* | 118 | struct zone_reclaim_stat* |
@@ -121,11 +131,36 @@ static inline bool mem_cgroup_disabled(void) | |||
121 | return false; | 131 | return false; |
122 | } | 132 | } |
123 | 133 | ||
124 | void mem_cgroup_update_file_mapped(struct page *page, int val); | 134 | void mem_cgroup_update_page_stat(struct page *page, |
135 | enum mem_cgroup_page_stat_item idx, | ||
136 | int val); | ||
137 | |||
138 | static 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 | |||
144 | static 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 | |||
125 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | 150 | unsigned 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); | ||
127 | u64 mem_cgroup_get_limit(struct mem_cgroup *mem); | 153 | u64 mem_cgroup_get_limit(struct mem_cgroup *mem); |
128 | 154 | ||
155 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx); | ||
156 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||
157 | void mem_cgroup_split_huge_fixup(struct page *head, struct page *tail); | ||
158 | #endif | ||
159 | |||
160 | #ifdef CONFIG_DEBUG_VM | ||
161 | bool mem_cgroup_bad_page_check(struct page *page); | ||
162 | void mem_cgroup_print_bad_page(struct page *page); | ||
163 | #endif | ||
129 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ | 164 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ |
130 | struct mem_cgroup; | 165 | struct 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 | ||
225 | static inline void mem_cgroup_rotate_reclaimable_page(struct page *page) | ||
226 | { | ||
227 | return ; | ||
228 | } | ||
229 | |||
190 | static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru) | 230 | static 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 | ||
250 | static inline struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm) | ||
251 | { | ||
252 | return NULL; | ||
253 | } | ||
254 | |||
210 | static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem) | 255 | static 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 | ||
226 | static inline int | 271 | static inline int |
227 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, | 272 | mem_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 | ||
233 | static inline void mem_cgroup_end_migration(struct mem_cgroup *mem, | 278 | static 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 | ||
271 | static inline unsigned long | 315 | static inline unsigned long |
272 | mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone, | 316 | mem_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 | ||
296 | static inline void mem_cgroup_update_file_mapped(struct page *page, | 340 | static inline void mem_cgroup_inc_page_stat(struct page *page, |
297 | int val) | 341 | enum mem_cgroup_page_stat_item idx) |
342 | { | ||
343 | } | ||
344 | |||
345 | static inline void mem_cgroup_dec_page_stat(struct page *page, | ||
346 | enum mem_cgroup_page_stat_item idx) | ||
298 | { | 347 | { |
299 | } | 348 | } |
300 | 349 | ||
301 | static inline | 350 | static inline |
302 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | 351 | unsigned 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 | ||
364 | static inline void mem_cgroup_split_huge_fixup(struct page *head, | ||
365 | struct page *tail) | ||
366 | { | ||
367 | } | ||
368 | |||
369 | static inline | ||
370 | void 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) | ||
376 | static inline bool | ||
377 | mem_cgroup_bad_page_check(struct page *page) | ||
378 | { | ||
379 | return false; | ||
380 | } | ||
381 | |||
382 | static inline void | ||
383 | mem_cgroup_print_bad_page(struct page *page) | ||
384 | { | ||
385 | } | ||
386 | #endif | ||
387 | |||
316 | #endif /* _LINUX_MEMCONTROL_H */ | 388 | #endif /* _LINUX_MEMCONTROL_H */ |
317 | 389 | ||