aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/memcontrol.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/memcontrol.h')
-rw-r--r--include/linux/memcontrol.h38
1 files changed, 15 insertions, 23 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index f4963ee4fdbc..b759827b2f1e 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -60,7 +60,7 @@ enum mem_cgroup_stat_index {
60}; 60};
61 61
62struct mem_cgroup_reclaim_cookie { 62struct mem_cgroup_reclaim_cookie {
63 struct zone *zone; 63 pg_data_t *pgdat;
64 int priority; 64 int priority;
65 unsigned int generation; 65 unsigned int generation;
66}; 66};
@@ -118,7 +118,7 @@ struct mem_cgroup_reclaim_iter {
118/* 118/*
119 * per-zone information in memory controller. 119 * per-zone information in memory controller.
120 */ 120 */
121struct mem_cgroup_per_zone { 121struct mem_cgroup_per_node {
122 struct lruvec lruvec; 122 struct lruvec lruvec;
123 unsigned long lru_size[NR_LRU_LISTS]; 123 unsigned long lru_size[NR_LRU_LISTS];
124 124
@@ -132,10 +132,6 @@ struct mem_cgroup_per_zone {
132 /* use container_of */ 132 /* use container_of */
133}; 133};
134 134
135struct mem_cgroup_per_node {
136 struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES];
137};
138
139struct mem_cgroup_threshold { 135struct mem_cgroup_threshold {
140 struct eventfd_ctx *eventfd; 136 struct eventfd_ctx *eventfd;
141 unsigned long threshold; 137 unsigned long threshold;
@@ -314,19 +310,15 @@ void mem_cgroup_uncharge_list(struct list_head *page_list);
314 310
315void mem_cgroup_migrate(struct page *oldpage, struct page *newpage); 311void mem_cgroup_migrate(struct page *oldpage, struct page *newpage);
316 312
317static inline struct mem_cgroup_per_zone * 313static struct mem_cgroup_per_node *
318mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone) 314mem_cgroup_nodeinfo(struct mem_cgroup *memcg, int nid)
319{ 315{
320 int nid = zone_to_nid(zone); 316 return memcg->nodeinfo[nid];
321 int zid = zone_idx(zone);
322
323 return &memcg->nodeinfo[nid]->zoneinfo[zid];
324} 317}
325 318
326/** 319/**
327 * mem_cgroup_lruvec - get the lru list vector for a node or a memcg zone 320 * mem_cgroup_lruvec - get the lru list vector for a node or a memcg zone
328 * @node: node of the wanted lruvec 321 * @node: node of the wanted lruvec
329 * @zone: zone of the wanted lruvec
330 * @memcg: memcg of the wanted lruvec 322 * @memcg: memcg of the wanted lruvec
331 * 323 *
332 * Returns the lru list vector holding pages for a given @node or a given 324 * Returns the lru list vector holding pages for a given @node or a given
@@ -334,9 +326,9 @@ mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone)
334 * is disabled. 326 * is disabled.
335 */ 327 */
336static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat, 328static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat,
337 struct zone *zone, struct mem_cgroup *memcg) 329 struct mem_cgroup *memcg)
338{ 330{
339 struct mem_cgroup_per_zone *mz; 331 struct mem_cgroup_per_node *mz;
340 struct lruvec *lruvec; 332 struct lruvec *lruvec;
341 333
342 if (mem_cgroup_disabled()) { 334 if (mem_cgroup_disabled()) {
@@ -344,7 +336,7 @@ static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat,
344 goto out; 336 goto out;
345 } 337 }
346 338
347 mz = mem_cgroup_zone_zoneinfo(memcg, zone); 339 mz = mem_cgroup_nodeinfo(memcg, pgdat->node_id);
348 lruvec = &mz->lruvec; 340 lruvec = &mz->lruvec;
349out: 341out:
350 /* 342 /*
@@ -352,8 +344,8 @@ out:
352 * we have to be prepared to initialize lruvec->pgdat here; 344 * we have to be prepared to initialize lruvec->pgdat here;
353 * and if offlined then reonlined, we need to reinitialize it. 345 * and if offlined then reonlined, we need to reinitialize it.
354 */ 346 */
355 if (unlikely(lruvec->pgdat != zone->zone_pgdat)) 347 if (unlikely(lruvec->pgdat != pgdat))
356 lruvec->pgdat = zone->zone_pgdat; 348 lruvec->pgdat = pgdat;
357 return lruvec; 349 return lruvec;
358} 350}
359 351
@@ -446,9 +438,9 @@ unsigned long mem_cgroup_node_nr_lru_pages(struct mem_cgroup *memcg,
446static inline 438static inline
447unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru) 439unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru)
448{ 440{
449 struct mem_cgroup_per_zone *mz; 441 struct mem_cgroup_per_node *mz;
450 442
451 mz = container_of(lruvec, struct mem_cgroup_per_zone, lruvec); 443 mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
452 return mz->lru_size[lru]; 444 return mz->lru_size[lru];
453} 445}
454 446
@@ -519,7 +511,7 @@ static inline void mem_cgroup_dec_page_stat(struct page *page,
519 mem_cgroup_update_page_stat(page, idx, -1); 511 mem_cgroup_update_page_stat(page, idx, -1);
520} 512}
521 513
522unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, 514unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
523 gfp_t gfp_mask, 515 gfp_t gfp_mask,
524 unsigned long *total_scanned); 516 unsigned long *total_scanned);
525 517
@@ -611,7 +603,7 @@ static inline void mem_cgroup_migrate(struct page *old, struct page *new)
611} 603}
612 604
613static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat, 605static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat,
614 struct zone *zone, struct mem_cgroup *memcg) 606 struct mem_cgroup *memcg)
615{ 607{
616 return node_lruvec(pgdat); 608 return node_lruvec(pgdat);
617} 609}
@@ -723,7 +715,7 @@ static inline void mem_cgroup_dec_page_stat(struct page *page,
723} 715}
724 716
725static inline 717static inline
726unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, 718unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
727 gfp_t gfp_mask, 719 gfp_t gfp_mask,
728 unsigned long *total_scanned) 720 unsigned long *total_scanned)
729{ 721{