Blame view
include/linux/memcontrol.h
8.07 KB
8cdea7c05
|
1 2 3 4 5 |
/* memcontrol.h - Memory Controller * * Copyright IBM Corporation, 2007 * Author Balbir Singh <balbir@linux.vnet.ibm.com> * |
78fb74669
|
6 7 8 |
* Copyright 2007 OpenVZ SWsoft Inc * Author: Pavel Emelianov <xemul@openvz.org> * |
8cdea7c05
|
9 10 11 12 13 14 15 16 17 18 19 20 21 |
* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef _LINUX_MEMCONTROL_H #define _LINUX_MEMCONTROL_H |
f8d665422
|
22 |
#include <linux/cgroup.h> |
78fb74669
|
23 24 |
struct mem_cgroup; struct page_cgroup; |
8697d3319
|
25 26 |
struct page; struct mm_struct; |
78fb74669
|
27 |
|
8b25c6d22
|
28 29 30 31 32 33 |
extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, struct list_head *dst, unsigned long *scanned, int order, int mode, struct zone *z, struct mem_cgroup *mem_cont, int active, int file); |
00f0b8259
|
34 |
#ifdef CONFIG_CGROUP_MEM_RES_CTLR |
2c26fdd70
|
35 36 37 38 39 40 41 42 43 44 |
/* * All "charge" functions with gfp_mask should use GFP_KERNEL or * (gfp_mask & GFP_RECLAIM_MASK). In current implementatin, memcg doesn't * alloc memory but reclaims memory from all available zones. So, "where I want * memory from" bits of gfp_mask has no meaning. So any bits of that field is * available but adding a rule is better. charge functions' gfp_mask should * be set to GFP_KERNEL or gfp_mask & GFP_RECLAIM_MASK for avoiding ambiguous * codes. * (Of course, if memcg does memory allocation in future, GFP_KERNEL is sane.) */ |
78fb74669
|
45 |
|
7a81b88cb
|
46 |
extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm, |
e1a1cd590
|
47 |
gfp_t gfp_mask); |
7a81b88cb
|
48 |
/* for swap handling */ |
8c7c6e34a
|
49 50 |
extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm, struct page *page, gfp_t mask, struct mem_cgroup **ptr); |
7a81b88cb
|
51 52 53 |
extern void mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *ptr); extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr); |
8289546e5
|
54 55 |
extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask); |
08e552c69
|
56 57 58 59 60 61 |
extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru); extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru); extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru); extern void mem_cgroup_del_lru(struct page *page); extern void mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to); |
569b846df
|
62 63 64 65 |
/* For coalescing uncharge for reducing memcg' overhead*/ extern void mem_cgroup_uncharge_start(void); extern void mem_cgroup_uncharge_end(void); |
3c541e14b
|
66 |
extern void mem_cgroup_uncharge_page(struct page *page); |
69029cd55
|
67 |
extern void mem_cgroup_uncharge_cache_page(struct page *page); |
ae3abae64
|
68 |
extern int mem_cgroup_shmem_charge_fallback(struct page *page, |
b5a84319a
|
69 |
struct mm_struct *mm, gfp_t gfp_mask); |
c9b0ed514
|
70 |
|
c7ba5c9e8
|
71 |
extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); |
4c4a22148
|
72 |
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); |
3062fc67d
|
73 |
|
e42d9d5d4
|
74 |
extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page); |
cf475ad28
|
75 |
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); |
2e4d40915
|
76 77 78 79 80 |
static inline int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup) { struct mem_cgroup *mem; rcu_read_lock(); |
e638c1394
|
81 |
mem = mem_cgroup_from_task(rcu_dereference((mm)->owner)); |
2e4d40915
|
82 83 84 |
rcu_read_unlock(); return cgroup == mem; } |
8a9f3ccd2
|
85 |
|
d324236b3
|
86 |
extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem); |
e8589cc18
|
87 |
extern int |
ac39cf8cb
|
88 89 |
mem_cgroup_prepare_migration(struct page *page, struct page *newpage, struct mem_cgroup **ptr); |
01b1ae63c
|
90 91 |
extern void mem_cgroup_end_migration(struct mem_cgroup *mem, struct page *oldpage, struct page *newpage); |
ae41be374
|
92 |
|
58ae83db2
|
93 94 95 |
/* * For memory reclaim. */ |
c772be939
|
96 |
int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg); |
56e49d218
|
97 |
int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg); |
a3d8e0549
|
98 99 100 |
unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone, enum lru_list lru); |
3e2f41f1f
|
101 102 103 104 |
struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone); struct zone_reclaim_stat* mem_cgroup_get_reclaim_stat_from_page(struct page *page); |
e222432bf
|
105 106 |
extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p); |
58ae83db2
|
107 |
|
c077719be
|
108 109 110 |
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP extern int do_swap_account; #endif |
f8d665422
|
111 112 113 114 115 116 117 |
static inline bool mem_cgroup_disabled(void) { if (mem_cgroup_subsys.disabled) return true; return false; } |
d8046582d
|
118 |
void mem_cgroup_update_file_mapped(struct page *page, int val); |
4e4169535
|
119 |
unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, |
00918b6ab
|
120 |
gfp_t gfp_mask); |
a63d83f42
|
121 |
u64 mem_cgroup_get_limit(struct mem_cgroup *mem); |
52d4b9ac0
|
122 |
#else /* CONFIG_CGROUP_MEM_RES_CTLR */ |
7a81b88cb
|
123 124 125 |
struct mem_cgroup; static inline int mem_cgroup_newpage_charge(struct page *page, |
8289546e5
|
126 |
struct mm_struct *mm, gfp_t gfp_mask) |
8a9f3ccd2
|
127 128 129 |
{ return 0; } |
8289546e5
|
130 131 |
static inline int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask) |
8a9f3ccd2
|
132 |
{ |
8289546e5
|
133 |
return 0; |
8a9f3ccd2
|
134 |
} |
8c7c6e34a
|
135 136 |
static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm, struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr) |
7a81b88cb
|
137 138 139 140 141 142 143 144 145 146 147 148 |
{ return 0; } static inline void mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *ptr) { } static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr) { } |
569b846df
|
149 150 151 152 153 154 155 |
static inline void mem_cgroup_uncharge_start(void) { } static inline void mem_cgroup_uncharge_end(void) { } |
8a9f3ccd2
|
156 157 158 |
static inline void mem_cgroup_uncharge_page(struct page *page) { } |
69029cd55
|
159 160 161 |
static inline void mem_cgroup_uncharge_cache_page(struct page *page) { } |
ae3abae64
|
162 |
static inline int mem_cgroup_shmem_charge_fallback(struct page *page, |
b5a84319a
|
163 |
struct mm_struct *mm, gfp_t gfp_mask) |
c9b0ed514
|
164 165 166 |
{ return 0; } |
08e552c69
|
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
static inline void mem_cgroup_add_lru_list(struct page *page, int lru) { } static inline void mem_cgroup_del_lru_list(struct page *page, int lru) { return ; } static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru) { return ; } static inline void mem_cgroup_del_lru(struct page *page) { return ; } static inline void mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to) |
66e1707bc
|
188 189 |
{ } |
e42d9d5d4
|
190 191 192 193 |
static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page) { return NULL; } |
bd845e38c
|
194 |
static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem) |
bed7161a5
|
195 |
{ |
60c12b120
|
196 |
return 1; |
bed7161a5
|
197 |
} |
4c4a22148
|
198 199 200 201 202 |
static inline int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem) { return 1; } |
d324236b3
|
203 204 205 206 |
static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem) { return NULL; } |
e8589cc18
|
207 |
static inline int |
ac39cf8cb
|
208 209 |
mem_cgroup_prepare_migration(struct page *page, struct page *newpage, struct mem_cgroup **ptr) |
ae41be374
|
210 211 212 |
{ return 0; } |
01b1ae63c
|
213 214 215 |
static inline void mem_cgroup_end_migration(struct mem_cgroup *mem, struct page *oldpage, struct page *newpage) |
ae41be374
|
216 217 |
{ } |
6c48a1d04
|
218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem) { return 0; } static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem, int priority) { } static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem, int priority) { } |
f8d665422
|
232 233 234 235 |
static inline bool mem_cgroup_disabled(void) { return true; } |
a636b327f
|
236 |
|
14797e236
|
237 |
static inline int |
c772be939
|
238 |
mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg) |
14797e236
|
239 240 241 |
{ return 1; } |
56e49d218
|
242 243 244 245 246 |
static inline int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg) { return 1; } |
a3d8e0549
|
247 248 249 250 251 252 |
static inline unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone, enum lru_list lru) { return 0; } |
3e2f41f1f
|
253 254 255 256 257 258 259 260 261 262 263 |
static inline struct zone_reclaim_stat* mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone) { return NULL; } static inline struct zone_reclaim_stat* mem_cgroup_get_reclaim_stat_from_page(struct page *page) { return NULL; } |
e222432bf
|
264 265 266 267 |
static inline void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) { } |
d8046582d
|
268 |
static inline void mem_cgroup_update_file_mapped(struct page *page, |
d69b042f3
|
269 270 271 |
int val) { } |
4e4169535
|
272 273 |
static inline unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, |
00918b6ab
|
274 |
gfp_t gfp_mask) |
4e4169535
|
275 276 277 |
{ return 0; } |
a63d83f42
|
278 279 280 281 282 |
static inline u64 mem_cgroup_get_limit(struct mem_cgroup *mem) { return 0; } |
78fb74669
|
283 |
#endif /* CONFIG_CGROUP_MEM_CONT */ |
8cdea7c05
|
284 |
#endif /* _LINUX_MEMCONTROL_H */ |