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