| #ifndef __LINUX_PAGEISOLATION_H |
| #define __LINUX_PAGEISOLATION_H |
| |
| /* |
| * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE. |
| * If specified range includes migrate types other than MOVABLE or CMA, |
| * this will fail with -EBUSY. |
| * |
| * For isolating all pages in the range finally, the caller have to |
| * free all pages in the range. test_page_isolated() can be used for |
| * test it. |
| */ |
| extern int |
| start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, |
| unsigned migratetype); |
| |
| /* |
| * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE. |
| * target range is [start_pfn, end_pfn) |
| */ |
| extern int |
| undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, |
| unsigned migratetype); |
| |
| /* |
| * Test all pages in [start_pfn, end_pfn) are isolated or not. |
| */ |
| int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn); |
| |
| /* |
| * Internal functions. Changes pageblock's migrate type. |
| */ |
| int set_migratetype_isolate(struct page *page); |
| void unset_migratetype_isolate(struct page *page, unsigned migratetype); |
| |
| /* The below functions must be run on a range from a single zone. */ |
| int alloc_contig_range(unsigned long start, unsigned long end, |
| unsigned migratetype); |
| void free_contig_range(unsigned long pfn, unsigned nr_pages); |
| |
| /* CMA stuff */ |
| extern void init_cma_reserved_pageblock(struct page *page); |
| |
| #endif |