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