diff options
| author | Takashi Iwai <tiwai@suse.de> | 2012-01-31 09:13:14 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2012-01-31 09:13:14 -0500 |
| commit | ea51e5040e24eefe44d70bc654a237ca1f0225b0 (patch) | |
| tree | df2e5922dcdfafae62a10d8cd97f98121064fc23 /include/linux/memcontrol.h | |
| parent | 3422a47041b8cb8f14ac1e3926bcf711121df6dc (diff) | |
| parent | 8dbd52daee38adaae4d5a674bcca837e694a4f4c (diff) | |
Merge branch 'fix/asoc' into for-linus
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 126 |
1 files changed, 87 insertions, 39 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index b87068a1a09e..4d34356fe644 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -32,13 +32,11 @@ enum mem_cgroup_page_stat_item { | |||
| 32 | MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */ | 32 | MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */ |
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | 35 | struct mem_cgroup_reclaim_cookie { |
| 36 | struct list_head *dst, | 36 | struct zone *zone; |
| 37 | unsigned long *scanned, int order, | 37 | int priority; |
| 38 | isolate_mode_t mode, | 38 | unsigned int generation; |
| 39 | struct zone *z, | 39 | }; |
| 40 | struct mem_cgroup *mem_cont, | ||
| 41 | int active, int file); | ||
| 42 | 40 | ||
| 43 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 41 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR |
| 44 | /* | 42 | /* |
| @@ -56,20 +54,21 @@ extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm, | |||
| 56 | gfp_t gfp_mask); | 54 | gfp_t gfp_mask); |
| 57 | /* for swap handling */ | 55 | /* for swap handling */ |
| 58 | extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm, | 56 | extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm, |
| 59 | struct page *page, gfp_t mask, struct mem_cgroup **ptr); | 57 | struct page *page, gfp_t mask, struct mem_cgroup **memcgp); |
| 60 | extern void mem_cgroup_commit_charge_swapin(struct page *page, | 58 | extern void mem_cgroup_commit_charge_swapin(struct page *page, |
| 61 | struct mem_cgroup *ptr); | 59 | struct mem_cgroup *memcg); |
| 62 | extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr); | 60 | extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg); |
| 63 | 61 | ||
| 64 | extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, | 62 | extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, |
| 65 | gfp_t gfp_mask); | 63 | gfp_t gfp_mask); |
| 66 | extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru); | 64 | |
| 67 | extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru); | 65 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); |
| 68 | extern void mem_cgroup_rotate_reclaimable_page(struct page *page); | 66 | struct lruvec *mem_cgroup_lru_add_list(struct zone *, struct page *, |
| 69 | extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru); | 67 | enum lru_list); |
| 70 | extern void mem_cgroup_del_lru(struct page *page); | 68 | void mem_cgroup_lru_del_list(struct page *, enum lru_list); |
| 71 | extern void mem_cgroup_move_lists(struct page *page, | 69 | void mem_cgroup_lru_del(struct page *); |
| 72 | enum lru_list from, enum lru_list to); | 70 | struct lruvec *mem_cgroup_lru_move_lists(struct zone *, struct page *, |
| 71 | enum lru_list, enum lru_list); | ||
| 73 | 72 | ||
| 74 | /* For coalescing uncharge for reducing memcg' overhead*/ | 73 | /* For coalescing uncharge for reducing memcg' overhead*/ |
| 75 | extern void mem_cgroup_uncharge_start(void); | 74 | extern void mem_cgroup_uncharge_start(void); |
| @@ -85,6 +84,9 @@ extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); | |||
| 85 | extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); | 84 | extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); |
| 86 | extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm); | 85 | extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm); |
| 87 | 86 | ||
| 87 | extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg); | ||
| 88 | extern struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont); | ||
| 89 | |||
| 88 | static inline | 90 | static inline |
| 89 | int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) | 91 | int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) |
| 90 | { | 92 | { |
| @@ -99,10 +101,15 @@ extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); | |||
| 99 | 101 | ||
| 100 | extern int | 102 | extern int |
| 101 | mem_cgroup_prepare_migration(struct page *page, | 103 | mem_cgroup_prepare_migration(struct page *page, |
| 102 | struct page *newpage, struct mem_cgroup **ptr, gfp_t gfp_mask); | 104 | struct page *newpage, struct mem_cgroup **memcgp, gfp_t gfp_mask); |
| 103 | extern void mem_cgroup_end_migration(struct mem_cgroup *memcg, | 105 | extern void mem_cgroup_end_migration(struct mem_cgroup *memcg, |
| 104 | struct page *oldpage, struct page *newpage, bool migration_ok); | 106 | struct page *oldpage, struct page *newpage, bool migration_ok); |
| 105 | 107 | ||
| 108 | struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, | ||
| 109 | struct mem_cgroup *, | ||
| 110 | struct mem_cgroup_reclaim_cookie *); | ||
| 111 | void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); | ||
| 112 | |||
| 106 | /* | 113 | /* |
| 107 | * For memory reclaim. | 114 | * For memory reclaim. |
| 108 | */ | 115 | */ |
| @@ -119,7 +126,10 @@ struct zone_reclaim_stat* | |||
| 119 | mem_cgroup_get_reclaim_stat_from_page(struct page *page); | 126 | mem_cgroup_get_reclaim_stat_from_page(struct page *page); |
| 120 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, | 127 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, |
| 121 | struct task_struct *p); | 128 | struct task_struct *p); |
| 129 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, | ||
| 130 | struct page *newpage); | ||
| 122 | 131 | ||
| 132 | extern void mem_cgroup_reset_owner(struct page *page); | ||
| 123 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | 133 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP |
| 124 | extern int do_swap_account; | 134 | extern int do_swap_account; |
| 125 | #endif | 135 | #endif |
| @@ -154,7 +164,7 @@ u64 mem_cgroup_get_limit(struct mem_cgroup *memcg); | |||
| 154 | 164 | ||
| 155 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx); | 165 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx); |
| 156 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 166 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 157 | void mem_cgroup_split_huge_fixup(struct page *head, struct page *tail); | 167 | void mem_cgroup_split_huge_fixup(struct page *head); |
| 158 | #endif | 168 | #endif |
| 159 | 169 | ||
| 160 | #ifdef CONFIG_DEBUG_VM | 170 | #ifdef CONFIG_DEBUG_VM |
| @@ -177,17 +187,17 @@ static inline int mem_cgroup_cache_charge(struct page *page, | |||
| 177 | } | 187 | } |
| 178 | 188 | ||
| 179 | static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm, | 189 | static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm, |
| 180 | struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr) | 190 | struct page *page, gfp_t gfp_mask, struct mem_cgroup **memcgp) |
| 181 | { | 191 | { |
| 182 | return 0; | 192 | return 0; |
| 183 | } | 193 | } |
| 184 | 194 | ||
| 185 | static inline void mem_cgroup_commit_charge_swapin(struct page *page, | 195 | static inline void mem_cgroup_commit_charge_swapin(struct page *page, |
| 186 | struct mem_cgroup *ptr) | 196 | struct mem_cgroup *memcg) |
| 187 | { | 197 | { |
| 188 | } | 198 | } |
| 189 | 199 | ||
| 190 | static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr) | 200 | static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg) |
| 191 | { | 201 | { |
| 192 | } | 202 | } |
| 193 | 203 | ||
| @@ -207,33 +217,33 @@ static inline void mem_cgroup_uncharge_cache_page(struct page *page) | |||
| 207 | { | 217 | { |
| 208 | } | 218 | } |
| 209 | 219 | ||
| 210 | static inline void mem_cgroup_add_lru_list(struct page *page, int lru) | 220 | static inline struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone, |
| 221 | struct mem_cgroup *memcg) | ||
| 211 | { | 222 | { |
| 223 | return &zone->lruvec; | ||
| 212 | } | 224 | } |
| 213 | 225 | ||
| 214 | static inline void mem_cgroup_del_lru_list(struct page *page, int lru) | 226 | static inline struct lruvec *mem_cgroup_lru_add_list(struct zone *zone, |
| 227 | struct page *page, | ||
| 228 | enum lru_list lru) | ||
| 215 | { | 229 | { |
| 216 | return ; | 230 | return &zone->lruvec; |
| 217 | } | 231 | } |
| 218 | 232 | ||
| 219 | static inline void mem_cgroup_rotate_reclaimable_page(struct page *page) | 233 | static inline void mem_cgroup_lru_del_list(struct page *page, enum lru_list lru) |
| 220 | { | 234 | { |
| 221 | return ; | ||
| 222 | } | 235 | } |
| 223 | 236 | ||
| 224 | static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru) | 237 | static inline void mem_cgroup_lru_del(struct page *page) |
| 225 | { | 238 | { |
| 226 | return ; | ||
| 227 | } | 239 | } |
| 228 | 240 | ||
| 229 | static inline void mem_cgroup_del_lru(struct page *page) | 241 | static inline struct lruvec *mem_cgroup_lru_move_lists(struct zone *zone, |
| 230 | { | 242 | struct page *page, |
| 231 | return ; | 243 | enum lru_list from, |
| 232 | } | 244 | enum lru_list to) |
| 233 | |||
| 234 | static inline void | ||
| 235 | mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to) | ||
| 236 | { | 245 | { |
| 246 | return &zone->lruvec; | ||
| 237 | } | 247 | } |
| 238 | 248 | ||
| 239 | static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page) | 249 | static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page) |
| @@ -266,7 +276,7 @@ static inline struct cgroup_subsys_state | |||
| 266 | 276 | ||
| 267 | static inline int | 277 | static inline int |
| 268 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, | 278 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, |
| 269 | struct mem_cgroup **ptr, gfp_t gfp_mask) | 279 | struct mem_cgroup **memcgp, gfp_t gfp_mask) |
| 270 | { | 280 | { |
| 271 | return 0; | 281 | return 0; |
| 272 | } | 282 | } |
| @@ -276,6 +286,19 @@ static inline void mem_cgroup_end_migration(struct mem_cgroup *memcg, | |||
| 276 | { | 286 | { |
| 277 | } | 287 | } |
| 278 | 288 | ||
| 289 | static inline struct mem_cgroup * | ||
| 290 | mem_cgroup_iter(struct mem_cgroup *root, | ||
| 291 | struct mem_cgroup *prev, | ||
| 292 | struct mem_cgroup_reclaim_cookie *reclaim) | ||
| 293 | { | ||
| 294 | return NULL; | ||
| 295 | } | ||
| 296 | |||
| 297 | static inline void mem_cgroup_iter_break(struct mem_cgroup *root, | ||
| 298 | struct mem_cgroup *prev) | ||
| 299 | { | ||
| 300 | } | ||
| 301 | |||
| 279 | static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *memcg) | 302 | static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *memcg) |
| 280 | { | 303 | { |
| 281 | return 0; | 304 | return 0; |
| @@ -357,8 +380,7 @@ u64 mem_cgroup_get_limit(struct mem_cgroup *memcg) | |||
| 357 | return 0; | 380 | return 0; |
| 358 | } | 381 | } |
| 359 | 382 | ||
| 360 | static inline void mem_cgroup_split_huge_fixup(struct page *head, | 383 | static inline void mem_cgroup_split_huge_fixup(struct page *head) |
| 361 | struct page *tail) | ||
| 362 | { | 384 | { |
| 363 | } | 385 | } |
| 364 | 386 | ||
| @@ -366,6 +388,14 @@ static inline | |||
| 366 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx) | 388 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx) |
| 367 | { | 389 | { |
| 368 | } | 390 | } |
| 391 | static inline void mem_cgroup_replace_page_cache(struct page *oldpage, | ||
| 392 | struct page *newpage) | ||
| 393 | { | ||
| 394 | } | ||
| 395 | |||
| 396 | static inline void mem_cgroup_reset_owner(struct page *page) | ||
| 397 | { | ||
| 398 | } | ||
| 369 | #endif /* CONFIG_CGROUP_MEM_CONT */ | 399 | #endif /* CONFIG_CGROUP_MEM_CONT */ |
| 370 | 400 | ||
| 371 | #if !defined(CONFIG_CGROUP_MEM_RES_CTLR) || !defined(CONFIG_DEBUG_VM) | 401 | #if !defined(CONFIG_CGROUP_MEM_RES_CTLR) || !defined(CONFIG_DEBUG_VM) |
| @@ -381,5 +411,23 @@ mem_cgroup_print_bad_page(struct page *page) | |||
| 381 | } | 411 | } |
| 382 | #endif | 412 | #endif |
| 383 | 413 | ||
| 414 | enum { | ||
| 415 | UNDER_LIMIT, | ||
| 416 | SOFT_LIMIT, | ||
| 417 | OVER_LIMIT, | ||
| 418 | }; | ||
| 419 | |||
| 420 | struct sock; | ||
| 421 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM | ||
| 422 | void sock_update_memcg(struct sock *sk); | ||
| 423 | void sock_release_memcg(struct sock *sk); | ||
| 424 | #else | ||
| 425 | static inline void sock_update_memcg(struct sock *sk) | ||
| 426 | { | ||
| 427 | } | ||
| 428 | static inline void sock_release_memcg(struct sock *sk) | ||
| 429 | { | ||
| 430 | } | ||
| 431 | #endif /* CONFIG_CGROUP_MEM_RES_CTLR_KMEM */ | ||
| 384 | #endif /* _LINUX_MEMCONTROL_H */ | 432 | #endif /* _LINUX_MEMCONTROL_H */ |
| 385 | 433 | ||
