linux/include/linux/page-isolation.h
<<
>>
Prefs
   1#ifndef __LINUX_PAGEISOLATION_H
   2#define __LINUX_PAGEISOLATION_H
   3
   4#ifdef CONFIG_MEMORY_ISOLATION
   5static inline bool has_isolate_pageblock(struct zone *zone)
   6{
   7        return zone->nr_isolate_pageblock;
   8}
   9static inline bool is_migrate_isolate_page(struct page *page)
  10{
  11        return get_pageblock_migratetype(page) == MIGRATE_ISOLATE;
  12}
  13static inline bool is_migrate_isolate(int migratetype)
  14{
  15        return migratetype == MIGRATE_ISOLATE;
  16}
  17#else
  18static inline bool has_isolate_pageblock(struct zone *zone)
  19{
  20        return false;
  21}
  22static inline bool is_migrate_isolate_page(struct page *page)
  23{
  24        return false;
  25}
  26static inline bool is_migrate_isolate(int migratetype)
  27{
  28        return false;
  29}
  30#endif
  31
  32bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
  33                         bool skip_hwpoisoned_pages);
  34void set_pageblock_migratetype(struct page *page, int migratetype);
  35int move_freepages_block(struct zone *zone, struct page *page,
  36                                int migratetype);
  37int move_freepages(struct zone *zone,
  38                          struct page *start_page, struct page *end_page,
  39                          int migratetype);
  40
  41/*
  42 * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE.
  43 * If specified range includes migrate types other than MOVABLE or CMA,
  44 * this will fail with -EBUSY.
  45 *
  46 * For isolating all pages in the range finally, the caller have to
  47 * free all pages in the range. test_page_isolated() can be used for
  48 * test it.
  49 */
  50int
  51start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
  52                         unsigned migratetype, bool skip_hwpoisoned_pages);
  53
  54/*
  55 * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE.
  56 * target range is [start_pfn, end_pfn)
  57 */
  58int
  59undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
  60                        unsigned migratetype);
  61
  62/*
  63 * Test all pages in [start_pfn, end_pfn) are isolated or not.
  64 */
  65int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
  66                        bool skip_hwpoisoned_pages);
  67
  68/*
  69 * Internal functions. Changes pageblock's migrate type.
  70 */
  71int set_migratetype_isolate(struct page *page, bool skip_hwpoisoned_pages);
  72void unset_migratetype_isolate(struct page *page, unsigned migratetype);
  73struct page *alloc_migrate_target(struct page *page, unsigned long private,
  74                                int **resultp);
  75
  76#endif
  77