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