diff options
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 98 |
1 files changed, 23 insertions, 75 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index eb65d29516ca..e0752d204d9e 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -54,39 +54,20 @@ struct mem_cgroup_reclaim_cookie { | |||
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | #ifdef CONFIG_MEMCG | 56 | #ifdef CONFIG_MEMCG |
| 57 | /* | 57 | int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm, |
| 58 | * All "charge" functions with gfp_mask should use GFP_KERNEL or | 58 | gfp_t gfp_mask, struct mem_cgroup **memcgp); |
| 59 | * (gfp_mask & GFP_RECLAIM_MASK). In current implementatin, memcg doesn't | 59 | void mem_cgroup_commit_charge(struct page *page, struct mem_cgroup *memcg, |
| 60 | * alloc memory but reclaims memory from all available zones. So, "where I want | 60 | bool lrucare); |
| 61 | * memory from" bits of gfp_mask has no meaning. So any bits of that field is | 61 | void mem_cgroup_cancel_charge(struct page *page, struct mem_cgroup *memcg); |
| 62 | * available but adding a rule is better. charge functions' gfp_mask should | 62 | void mem_cgroup_uncharge(struct page *page); |
| 63 | * be set to GFP_KERNEL or gfp_mask & GFP_RECLAIM_MASK for avoiding ambiguous | 63 | void mem_cgroup_uncharge_list(struct list_head *page_list); |
| 64 | * codes. | ||
| 65 | * (Of course, if memcg does memory allocation in future, GFP_KERNEL is sane.) | ||
| 66 | */ | ||
| 67 | 64 | ||
| 68 | extern int mem_cgroup_charge_anon(struct page *page, struct mm_struct *mm, | 65 | void mem_cgroup_migrate(struct page *oldpage, struct page *newpage, |
| 69 | gfp_t gfp_mask); | 66 | bool lrucare); |
| 70 | /* for swap handling */ | ||
| 71 | extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm, | ||
| 72 | struct page *page, gfp_t mask, struct mem_cgroup **memcgp); | ||
| 73 | extern void mem_cgroup_commit_charge_swapin(struct page *page, | ||
| 74 | struct mem_cgroup *memcg); | ||
| 75 | extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg); | ||
| 76 | |||
| 77 | extern int mem_cgroup_charge_file(struct page *page, struct mm_struct *mm, | ||
| 78 | gfp_t gfp_mask); | ||
| 79 | 67 | ||
| 80 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); | 68 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); |
| 81 | struct lruvec *mem_cgroup_page_lruvec(struct page *, struct zone *); | 69 | struct lruvec *mem_cgroup_page_lruvec(struct page *, struct zone *); |
| 82 | 70 | ||
| 83 | /* For coalescing uncharge for reducing memcg' overhead*/ | ||
| 84 | extern void mem_cgroup_uncharge_start(void); | ||
| 85 | extern void mem_cgroup_uncharge_end(void); | ||
| 86 | |||
| 87 | extern void mem_cgroup_uncharge_page(struct page *page); | ||
| 88 | extern void mem_cgroup_uncharge_cache_page(struct page *page); | ||
| 89 | |||
| 90 | bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg, | 71 | bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg, |
| 91 | struct mem_cgroup *memcg); | 72 | struct mem_cgroup *memcg); |
| 92 | bool task_in_mem_cgroup(struct task_struct *task, | 73 | bool task_in_mem_cgroup(struct task_struct *task, |
| @@ -113,12 +94,6 @@ bool mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *memcg) | |||
| 113 | 94 | ||
| 114 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); | 95 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); |
| 115 | 96 | ||
| 116 | extern void | ||
| 117 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, | ||
| 118 | struct mem_cgroup **memcgp); | ||
| 119 | extern void mem_cgroup_end_migration(struct mem_cgroup *memcg, | ||
| 120 | struct page *oldpage, struct page *newpage, bool migration_ok); | ||
| 121 | |||
| 122 | struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, | 97 | struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, |
| 123 | struct mem_cgroup *, | 98 | struct mem_cgroup *, |
| 124 | struct mem_cgroup_reclaim_cookie *); | 99 | struct mem_cgroup_reclaim_cookie *); |
| @@ -133,8 +108,6 @@ unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list); | |||
| 133 | void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int); | 108 | void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int); |
| 134 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, | 109 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, |
| 135 | struct task_struct *p); | 110 | struct task_struct *p); |
| 136 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, | ||
| 137 | struct page *newpage); | ||
| 138 | 111 | ||
| 139 | static inline void mem_cgroup_oom_enable(void) | 112 | static inline void mem_cgroup_oom_enable(void) |
| 140 | { | 113 | { |
| @@ -233,46 +206,36 @@ void mem_cgroup_print_bad_page(struct page *page); | |||
| 233 | #else /* CONFIG_MEMCG */ | 206 | #else /* CONFIG_MEMCG */ |
| 234 | struct mem_cgroup; | 207 | struct mem_cgroup; |
| 235 | 208 | ||
| 236 | static inline int mem_cgroup_charge_anon(struct page *page, | 209 | static inline int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm, |
| 237 | struct mm_struct *mm, gfp_t gfp_mask) | 210 | gfp_t gfp_mask, |
| 238 | { | 211 | struct mem_cgroup **memcgp) |
| 239 | return 0; | ||
| 240 | } | ||
| 241 | |||
| 242 | static inline int mem_cgroup_charge_file(struct page *page, | ||
| 243 | struct mm_struct *mm, gfp_t gfp_mask) | ||
| 244 | { | ||
| 245 | return 0; | ||
| 246 | } | ||
| 247 | |||
| 248 | static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm, | ||
| 249 | struct page *page, gfp_t gfp_mask, struct mem_cgroup **memcgp) | ||
| 250 | { | 212 | { |
| 213 | *memcgp = NULL; | ||
| 251 | return 0; | 214 | return 0; |
| 252 | } | 215 | } |
| 253 | 216 | ||
| 254 | static inline void mem_cgroup_commit_charge_swapin(struct page *page, | 217 | static inline void mem_cgroup_commit_charge(struct page *page, |
| 255 | struct mem_cgroup *memcg) | 218 | struct mem_cgroup *memcg, |
| 256 | { | 219 | bool lrucare) |
| 257 | } | ||
| 258 | |||
| 259 | static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg) | ||
| 260 | { | 220 | { |
| 261 | } | 221 | } |
| 262 | 222 | ||
| 263 | static inline void mem_cgroup_uncharge_start(void) | 223 | static inline void mem_cgroup_cancel_charge(struct page *page, |
| 224 | struct mem_cgroup *memcg) | ||
| 264 | { | 225 | { |
| 265 | } | 226 | } |
| 266 | 227 | ||
| 267 | static inline void mem_cgroup_uncharge_end(void) | 228 | static inline void mem_cgroup_uncharge(struct page *page) |
| 268 | { | 229 | { |
| 269 | } | 230 | } |
| 270 | 231 | ||
| 271 | static inline void mem_cgroup_uncharge_page(struct page *page) | 232 | static inline void mem_cgroup_uncharge_list(struct list_head *page_list) |
| 272 | { | 233 | { |
| 273 | } | 234 | } |
| 274 | 235 | ||
| 275 | static inline void mem_cgroup_uncharge_cache_page(struct page *page) | 236 | static inline void mem_cgroup_migrate(struct page *oldpage, |
| 237 | struct page *newpage, | ||
| 238 | bool lrucare) | ||
| 276 | { | 239 | { |
| 277 | } | 240 | } |
| 278 | 241 | ||
| @@ -311,17 +274,6 @@ static inline struct cgroup_subsys_state | |||
| 311 | return NULL; | 274 | return NULL; |
| 312 | } | 275 | } |
| 313 | 276 | ||
| 314 | static inline void | ||
| 315 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, | ||
| 316 | struct mem_cgroup **memcgp) | ||
| 317 | { | ||
| 318 | } | ||
| 319 | |||
| 320 | static inline void mem_cgroup_end_migration(struct mem_cgroup *memcg, | ||
| 321 | struct page *oldpage, struct page *newpage, bool migration_ok) | ||
| 322 | { | ||
| 323 | } | ||
| 324 | |||
| 325 | static inline struct mem_cgroup * | 277 | static inline struct mem_cgroup * |
| 326 | mem_cgroup_iter(struct mem_cgroup *root, | 278 | mem_cgroup_iter(struct mem_cgroup *root, |
| 327 | struct mem_cgroup *prev, | 279 | struct mem_cgroup *prev, |
| @@ -417,10 +369,6 @@ static inline | |||
| 417 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx) | 369 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx) |
| 418 | { | 370 | { |
| 419 | } | 371 | } |
| 420 | static inline void mem_cgroup_replace_page_cache(struct page *oldpage, | ||
| 421 | struct page *newpage) | ||
| 422 | { | ||
| 423 | } | ||
| 424 | #endif /* CONFIG_MEMCG */ | 372 | #endif /* CONFIG_MEMCG */ |
| 425 | 373 | ||
| 426 | #if !defined(CONFIG_MEMCG) || !defined(CONFIG_DEBUG_VM) | 374 | #if !defined(CONFIG_MEMCG) || !defined(CONFIG_DEBUG_VM) |
