Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
a5d76b54 KH |
2 | #ifndef __LINUX_PAGEISOLATION_H |
3 | #define __LINUX_PAGEISOLATION_H | |
4 | ||
194159fb | 5 | #ifdef CONFIG_MEMORY_ISOLATION |
ad53f92e JK |
6 | static inline bool has_isolate_pageblock(struct zone *zone) |
7 | { | |
8 | return zone->nr_isolate_pageblock; | |
9 | } | |
194159fb MK |
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 | |
ad53f92e JK |
19 | static inline bool has_isolate_pageblock(struct zone *zone) |
20 | { | |
21 | return false; | |
22 | } | |
194159fb MK |
23 | static inline bool is_migrate_isolate_page(struct page *page) |
24 | { | |
25 | return false; | |
26 | } | |
27 | static inline bool is_migrate_isolate(int migratetype) | |
28 | { | |
29 | return false; | |
30 | } | |
31 | #endif | |
ee6f509c | 32 | |
b023f468 | 33 | bool has_unmovable_pages(struct zone *zone, struct page *page, int count, |
4da2ce25 | 34 | int migratetype, bool skip_hwpoisoned_pages); |
ee6f509c MK |
35 | void set_pageblock_migratetype(struct page *page, int migratetype); |
36 | int move_freepages_block(struct zone *zone, struct page *page, | |
02aa0cdd | 37 | int migratetype, int *num_movable); |
435b405c | 38 | |
a5d76b54 KH |
39 | /* |
40 | * Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE. | |
0815f3d8 | 41 | * If specified range includes migrate types other than MOVABLE or CMA, |
a5d76b54 KH |
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 | */ | |
ee6f509c | 48 | int |
0815f3d8 | 49 | start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, |
b023f468 | 50 | unsigned migratetype, bool skip_hwpoisoned_pages); |
a5d76b54 KH |
51 | |
52 | /* | |
53 | * Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE. | |
54 | * target range is [start_pfn, end_pfn) | |
55 | */ | |
ee6f509c | 56 | int |
0815f3d8 MN |
57 | undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, |
58 | unsigned migratetype); | |
a5d76b54 KH |
59 | |
60 | /* | |
0815f3d8 | 61 | * Test all pages in [start_pfn, end_pfn) are isolated or not. |
a5d76b54 | 62 | */ |
b023f468 WC |
63 | int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn, |
64 | bool skip_hwpoisoned_pages); | |
a5d76b54 | 65 | |
666feb21 | 66 | struct page *alloc_migrate_target(struct page *page, unsigned long private); |
a5d76b54 KH |
67 | |
68 | #endif |