Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef __LINUX_PAGEISOLATION_H 3 : #define __LINUX_PAGEISOLATION_H 4 : 5 : #ifdef CONFIG_MEMORY_ISOLATION 6 : static inline bool has_isolate_pageblock(struct zone *zone) 7 : { 8 : return zone->nr_isolate_pageblock; 9 : } 10 : static inline bool is_migrate_isolate_page(struct page *page) 11 : { 12 : return get_pageblock_migratetype(page) == MIGRATE_ISOLATE; 13 : } 14 : static inline bool is_migrate_isolate(int migratetype) 15 : { 16 : return migratetype == MIGRATE_ISOLATE; 17 : } 18 : #else 19 15316 : static inline bool has_isolate_pageblock(struct zone *zone) 20 : { 21 357 : return false; 22 : } 23 : static inline bool is_migrate_isolate_page(struct page *page) 24 : { 25 : return false; 26 : } 27 74900 : static inline bool is_migrate_isolate(int migratetype) 28 : { 29 74900 : return false; 30 : } 31 : #endif 32 : 33 : #define MEMORY_OFFLINE 0x1 34 : #define REPORT_FAILURE 0x2 35 : 36 : struct page *has_unmovable_pages(struct zone *zone, struct page *page, 37 : int migratetype, int flags); 38 : void set_pageblock_migratetype(struct page *page, int migratetype); 39 : int move_freepages_block(struct zone *zone, struct page *page, 40 : int migratetype, int *num_movable); 41 : 42 : /* 43 : * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE. 44 : */ 45 : int 46 : start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, 47 : unsigned migratetype, int flags); 48 : 49 : /* 50 : * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE. 51 : * target range is [start_pfn, end_pfn) 52 : */ 53 : void 54 : undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, 55 : unsigned migratetype); 56 : 57 : /* 58 : * Test all pages in [start_pfn, end_pfn) are isolated or not. 59 : */ 60 : int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn, 61 : int isol_flags); 62 : 63 : struct page *alloc_migrate_target(struct page *page, unsigned long private); 64 : 65 : #endif