diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f8a6a39c440d..40cdba68de34 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -471,6 +471,39 @@ void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem, int priority) | |||
471 | mem->prev_priority = priority; | 471 | mem->prev_priority = priority; |
472 | } | 472 | } |
473 | 473 | ||
474 | /* | ||
475 | * Calculate # of pages to be scanned in this priority/zone. | ||
476 | * See also vmscan.c | ||
477 | * | ||
478 | * priority starts from "DEF_PRIORITY" and decremented in each loop. | ||
479 | * (see include/linux/mmzone.h) | ||
480 | */ | ||
481 | |||
482 | long mem_cgroup_calc_reclaim_active(struct mem_cgroup *mem, | ||
483 | struct zone *zone, int priority) | ||
484 | { | ||
485 | long nr_active; | ||
486 | int nid = zone->zone_pgdat->node_id; | ||
487 | int zid = zone_idx(zone); | ||
488 | struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(mem, nid, zid); | ||
489 | |||
490 | nr_active = MEM_CGROUP_ZSTAT(mz, MEM_CGROUP_ZSTAT_ACTIVE); | ||
491 | return (nr_active >> priority); | ||
492 | } | ||
493 | |||
494 | long mem_cgroup_calc_reclaim_inactive(struct mem_cgroup *mem, | ||
495 | struct zone *zone, int priority) | ||
496 | { | ||
497 | long nr_inactive; | ||
498 | int nid = zone->zone_pgdat->node_id; | ||
499 | int zid = zone_idx(zone); | ||
500 | struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(mem, nid, zid); | ||
501 | |||
502 | nr_inactive = MEM_CGROUP_ZSTAT(mz, MEM_CGROUP_ZSTAT_INACTIVE); | ||
503 | |||
504 | return (nr_inactive >> priority); | ||
505 | } | ||
506 | |||
474 | unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | 507 | unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, |
475 | struct list_head *dst, | 508 | struct list_head *dst, |
476 | unsigned long *scanned, int order, | 509 | unsigned long *scanned, int order, |