diff options
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 7b4d9d79570b..b3e7a667e03c 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -30,9 +30,21 @@ struct page; | |||
| 30 | struct mm_struct; | 30 | struct mm_struct; |
| 31 | struct kmem_cache; | 31 | struct kmem_cache; |
| 32 | 32 | ||
| 33 | /* Stats that can be updated by kernel. */ | 33 | /* |
| 34 | enum mem_cgroup_page_stat_item { | 34 | * The corresponding mem_cgroup_stat_names is defined in mm/memcontrol.c, |
| 35 | MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */ | 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, | ||
| 36 | }; | 48 | }; |
| 37 | 49 | ||
| 38 | struct mem_cgroup_reclaim_cookie { | 50 | struct mem_cgroup_reclaim_cookie { |
| @@ -85,7 +97,7 @@ extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); | |||
| 85 | extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm); | 97 | extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm); |
| 86 | 98 | ||
| 87 | extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg); | 99 | extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg); |
| 88 | extern struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont); | 100 | extern struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css); |
| 89 | 101 | ||
| 90 | static inline | 102 | static inline |
| 91 | bool mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *memcg) | 103 | bool mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *memcg) |
| @@ -125,6 +137,25 @@ extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, | |||
| 125 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, | 137 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, |
| 126 | struct page *newpage); | 138 | struct page *newpage); |
| 127 | 139 | ||
| 140 | static inline void mem_cgroup_oom_enable(void) | ||
| 141 | { | ||
| 142 | WARN_ON(current->memcg_oom.may_oom); | ||
| 143 | current->memcg_oom.may_oom = 1; | ||
| 144 | } | ||
| 145 | |||
| 146 | static inline void mem_cgroup_oom_disable(void) | ||
| 147 | { | ||
| 148 | WARN_ON(!current->memcg_oom.may_oom); | ||
| 149 | current->memcg_oom.may_oom = 0; | ||
| 150 | } | ||
| 151 | |||
| 152 | static inline bool task_in_memcg_oom(struct task_struct *p) | ||
| 153 | { | ||
| 154 | return p->memcg_oom.memcg; | ||
| 155 | } | ||
| 156 | |||
| 157 | bool mem_cgroup_oom_synchronize(bool wait); | ||
| 158 | |||
| 128 | #ifdef CONFIG_MEMCG_SWAP | 159 | #ifdef CONFIG_MEMCG_SWAP |
| 129 | extern int do_swap_account; | 160 | extern int do_swap_account; |
| 130 | #endif | 161 | #endif |
| @@ -165,17 +196,17 @@ static inline void mem_cgroup_end_update_page_stat(struct page *page, | |||
| 165 | } | 196 | } |
| 166 | 197 | ||
| 167 | void mem_cgroup_update_page_stat(struct page *page, | 198 | void mem_cgroup_update_page_stat(struct page *page, |
| 168 | enum mem_cgroup_page_stat_item idx, | 199 | enum mem_cgroup_stat_index idx, |
| 169 | int val); | 200 | int val); |
| 170 | 201 | ||
| 171 | static inline void mem_cgroup_inc_page_stat(struct page *page, | 202 | static inline void mem_cgroup_inc_page_stat(struct page *page, |
| 172 | enum mem_cgroup_page_stat_item idx) | 203 | enum mem_cgroup_stat_index idx) |
| 173 | { | 204 | { |
| 174 | mem_cgroup_update_page_stat(page, idx, 1); | 205 | mem_cgroup_update_page_stat(page, idx, 1); |
| 175 | } | 206 | } |
| 176 | 207 | ||
| 177 | static inline void mem_cgroup_dec_page_stat(struct page *page, | 208 | static inline void mem_cgroup_dec_page_stat(struct page *page, |
| 178 | enum mem_cgroup_page_stat_item idx) | 209 | enum mem_cgroup_stat_index idx) |
| 179 | { | 210 | { |
| 180 | mem_cgroup_update_page_stat(page, idx, -1); | 211 | mem_cgroup_update_page_stat(page, idx, -1); |
| 181 | } | 212 | } |
| @@ -348,13 +379,31 @@ static inline void mem_cgroup_end_update_page_stat(struct page *page, | |||
| 348 | { | 379 | { |
| 349 | } | 380 | } |
| 350 | 381 | ||
| 382 | static inline void mem_cgroup_oom_enable(void) | ||
| 383 | { | ||
| 384 | } | ||
| 385 | |||
| 386 | static inline void mem_cgroup_oom_disable(void) | ||
| 387 | { | ||
| 388 | } | ||
| 389 | |||
| 390 | static inline bool task_in_memcg_oom(struct task_struct *p) | ||
| 391 | { | ||
| 392 | return false; | ||
| 393 | } | ||
| 394 | |||
| 395 | static inline bool mem_cgroup_oom_synchronize(bool wait) | ||
| 396 | { | ||
| 397 | return false; | ||
| 398 | } | ||
| 399 | |||
| 351 | static inline void mem_cgroup_inc_page_stat(struct page *page, | 400 | static inline void mem_cgroup_inc_page_stat(struct page *page, |
| 352 | enum mem_cgroup_page_stat_item idx) | 401 | enum mem_cgroup_stat_index idx) |
| 353 | { | 402 | { |
| 354 | } | 403 | } |
| 355 | 404 | ||
| 356 | static inline void mem_cgroup_dec_page_stat(struct page *page, | 405 | static inline void mem_cgroup_dec_page_stat(struct page *page, |
| 357 | enum mem_cgroup_page_stat_item idx) | 406 | enum mem_cgroup_stat_index idx) |
| 358 | { | 407 | { |
| 359 | } | 408 | } |
| 360 | 409 | ||
