aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMinchan Kim <minchan@kernel.org>2012-07-31 19:43:01 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-07-31 21:42:42 -0400
commit80934513b230bfcf70265f2ef0fdae89fb391633 (patch)
tree9737d9b84b52312af968fe97f7c55fbf53617570
parent97d255c816946388bab504122937730d3447c612 (diff)
mm: clean up __count_immobile_pages()
The __count_immobile_pages() naming is rather awkward. Choose a more clear name and add a comment. Signed-off-by: Minchan Kim <minchan@kernel.org> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Michal Hocko <mhocko@suse.cz> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/page_alloc.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index bb790f5919e..fba2a1223f1 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5471,26 +5471,28 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags,
5471} 5471}
5472 5472
5473/* 5473/*
5474 * This is designed as sub function...plz see page_isolation.c also. 5474 * This function checks whether pageblock includes unmovable pages or not.
5475 * set/clear page block's type to be ISOLATE. 5475 * If @count is not zero, it is okay to include less @count unmovable pages
5476 * page allocater never alloc memory from ISOLATE block. 5476 *
5477 * PageLRU check wihtout isolation or lru_lock could race so that
5478 * MIGRATE_MOVABLE block might include unmovable pages. It means you can't
5479 * expect this function should be exact.
5477 */ 5480 */
5478 5481static bool
5479static int 5482__has_unmovable_pages(struct zone *zone, struct page *page, int count)
5480__count_immobile_pages(struct zone *zone, struct page *page, int count)
5481{ 5483{
5482 unsigned long pfn, iter, found; 5484 unsigned long pfn, iter, found;
5483 int mt; 5485 int mt;
5484 5486
5485 /* 5487 /*
5486 * For avoiding noise data, lru_add_drain_all() should be called 5488 * For avoiding noise data, lru_add_drain_all() should be called
5487 * If ZONE_MOVABLE, the zone never contains immobile pages 5489 * If ZONE_MOVABLE, the zone never contains unmovable pages
5488 */ 5490 */
5489 if (zone_idx(zone) == ZONE_MOVABLE) 5491 if (zone_idx(zone) == ZONE_MOVABLE)
5490 return true; 5492 return false;
5491 mt = get_pageblock_migratetype(page); 5493 mt = get_pageblock_migratetype(page);
5492 if (mt == MIGRATE_MOVABLE || is_migrate_cma(mt)) 5494 if (mt == MIGRATE_MOVABLE || is_migrate_cma(mt))
5493 return true; 5495 return false;
5494 5496
5495 pfn = page_to_pfn(page); 5497 pfn = page_to_pfn(page);
5496 for (found = 0, iter = 0; iter < pageblock_nr_pages; iter++) { 5498 for (found = 0, iter = 0; iter < pageblock_nr_pages; iter++) {
@@ -5528,9 +5530,9 @@ __count_immobile_pages(struct zone *zone, struct page *page, int count)
5528 * page at boot. 5530 * page at boot.
5529 */ 5531 */
5530 if (found > count) 5532 if (found > count)
5531 return false; 5533 return true;
5532 } 5534 }
5533 return true; 5535 return false;
5534} 5536}
5535 5537
5536bool is_pageblock_removable_nolock(struct page *page) 5538bool is_pageblock_removable_nolock(struct page *page)
@@ -5554,7 +5556,7 @@ bool is_pageblock_removable_nolock(struct page *page)
5554 zone->zone_start_pfn + zone->spanned_pages <= pfn) 5556 zone->zone_start_pfn + zone->spanned_pages <= pfn)
5555 return false; 5557 return false;
5556 5558
5557 return __count_immobile_pages(zone, page, 0); 5559 return !__has_unmovable_pages(zone, page, 0);
5558} 5560}
5559 5561
5560int set_migratetype_isolate(struct page *page) 5562int set_migratetype_isolate(struct page *page)
@@ -5593,12 +5595,12 @@ int set_migratetype_isolate(struct page *page)
5593 * FIXME: Now, memory hotplug doesn't call shrink_slab() by itself. 5595 * FIXME: Now, memory hotplug doesn't call shrink_slab() by itself.
5594 * We just check MOVABLE pages. 5596 * We just check MOVABLE pages.
5595 */ 5597 */
5596 if (__count_immobile_pages(zone, page, arg.pages_found)) 5598 if (!__has_unmovable_pages(zone, page, arg.pages_found))
5597 ret = 0; 5599 ret = 0;
5598
5599 /* 5600 /*
5600 * immobile means "not-on-lru" paes. If immobile is larger than 5601 * Unmovable means "not-on-lru" pages. If Unmovable pages are
5601 * removable-by-driver pages reported by notifier, we'll fail. 5602 * larger than removable-by-driver pages reported by notifier,
5603 * we'll fail.
5602 */ 5604 */
5603 5605
5604out: 5606out: