diff options
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 38 |
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 | ||
| 62 | struct mem_cgroup_reclaim_cookie { | 62 | struct 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 | */ |
| 121 | struct mem_cgroup_per_zone { | 121 | struct 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 | ||
| 135 | struct mem_cgroup_per_node { | ||
| 136 | struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES]; | ||
| 137 | }; | ||
| 138 | |||
| 139 | struct mem_cgroup_threshold { | 135 | struct 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 | ||
| 315 | void mem_cgroup_migrate(struct page *oldpage, struct page *newpage); | 311 | void mem_cgroup_migrate(struct page *oldpage, struct page *newpage); |
| 316 | 312 | ||
| 317 | static inline struct mem_cgroup_per_zone * | 313 | static struct mem_cgroup_per_node * |
| 318 | mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone) | 314 | mem_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 | */ |
| 336 | static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat, | 328 | static 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; |
| 349 | out: | 341 | out: |
| 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, | |||
| 446 | static inline | 438 | static inline |
| 447 | unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list lru) | 439 | unsigned 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 | ||
| 522 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | 514 | unsigned 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 | ||
| 613 | static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat, | 605 | static 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 | ||
| 725 | static inline | 717 | static inline |
| 726 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | 718 | unsigned 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 | { |
