blob: 76a9539cfd3f629403b66e2daaf9c6b5ffbcef1b [file] [log] [blame]
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -07001#ifndef __LINUX_PAGEISOLATION_H
2#define __LINUX_PAGEISOLATION_H
3
Minchan Kimee6f5092012-07-31 16:43:50 -07004
5bool has_unmovable_pages(struct zone *zone, struct page *page, int count);
6void set_pageblock_migratetype(struct page *page, int migratetype);
7int move_freepages_block(struct zone *zone, struct page *page,
8 int migratetype);
Minchan Kim435b4052012-10-08 16:32:16 -07009int move_freepages(struct zone *zone,
10 struct page *start_page, struct page *end_page,
11 int migratetype);
12
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070013/*
14 * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE.
Michal Nazarewicz0815f3d2012-04-03 15:06:15 +020015 * If specified range includes migrate types other than MOVABLE or CMA,
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070016 * this will fail with -EBUSY.
17 *
18 * For isolating all pages in the range finally, the caller have to
19 * free all pages in the range. test_page_isolated() can be used for
20 * test it.
21 */
Minchan Kimee6f5092012-07-31 16:43:50 -070022int
Michal Nazarewicz0815f3d2012-04-03 15:06:15 +020023start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
24 unsigned migratetype);
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070025
26/*
27 * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE.
28 * target range is [start_pfn, end_pfn)
29 */
Minchan Kimee6f5092012-07-31 16:43:50 -070030int
Michal Nazarewicz0815f3d2012-04-03 15:06:15 +020031undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
32 unsigned migratetype);
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070033
34/*
Michal Nazarewicz0815f3d2012-04-03 15:06:15 +020035 * Test all pages in [start_pfn, end_pfn) are isolated or not.
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070036 */
Michal Nazarewicz0815f3d2012-04-03 15:06:15 +020037int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn);
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070038
39/*
Michal Nazarewicz0815f3d2012-04-03 15:06:15 +020040 * Internal functions. Changes pageblock's migrate type.
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070041 */
Minchan Kimee6f5092012-07-31 16:43:50 -070042int set_migratetype_isolate(struct page *page);
43void unset_migratetype_isolate(struct page *page, unsigned migratetype);
Minchan Kim723a0642012-10-08 16:32:52 -070044struct page *alloc_migrate_target(struct page *page, unsigned long private,
45 int **resultp);
KAMEZAWA Hiroyukia5d76b52007-10-16 01:26:11 -070046
47#endif