2017-11-01 15:07:57 +01:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
2007-10-16 01:26:11 -07:00
|
|
|
#ifndef __LINUX_PAGEISOLATION_H
|
|
|
|
|
#define __LINUX_PAGEISOLATION_H
|
|
|
|
|
|
2013-02-22 16:33:58 -08:00
|
|
|
#ifdef CONFIG_MEMORY_ISOLATION
|
2014-11-13 15:19:11 -08:00
|
|
|
static inline bool has_isolate_pageblock(struct zone *zone)
|
|
|
|
|
{
|
|
|
|
|
return zone->nr_isolate_pageblock;
|
|
|
|
|
}
|
2013-02-22 16:33:58 -08:00
|
|
|
static inline bool is_migrate_isolate_page(struct page *page)
|
|
|
|
|
{
|
|
|
|
|
return get_pageblock_migratetype(page) == MIGRATE_ISOLATE;
|
|
|
|
|
}
|
|
|
|
|
static inline bool is_migrate_isolate(int migratetype)
|
|
|
|
|
{
|
|
|
|
|
return migratetype == MIGRATE_ISOLATE;
|
|
|
|
|
}
|
|
|
|
|
#else
|
2014-11-13 15:19:11 -08:00
|
|
|
static inline bool has_isolate_pageblock(struct zone *zone)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2013-02-22 16:33:58 -08:00
|
|
|
static inline bool is_migrate_isolate_page(struct page *page)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
static inline bool is_migrate_isolate(int migratetype)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2012-07-31 16:43:50 -07:00
|
|
|
|
2019-11-30 17:54:07 -08:00
|
|
|
#define MEMORY_OFFLINE 0x1
|
2018-12-28 00:33:56 -08:00
|
|
|
#define REPORT_FAILURE 0x2
|
|
|
|
|
|
2012-12-11 16:00:45 -08:00
|
|
|
bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
|
2018-12-28 00:33:56 -08:00
|
|
|
int migratetype, int flags);
|
2012-07-31 16:43:50 -07:00
|
|
|
void set_pageblock_migratetype(struct page *page, int migratetype);
|
|
|
|
|
int move_freepages_block(struct zone *zone, struct page *page,
|
2017-05-08 15:54:40 -07:00
|
|
|
int migratetype, int *num_movable);
|
2012-10-08 16:32:16 -07:00
|
|
|
|
2007-10-16 01:26:11 -07:00
|
|
|
/*
|
|
|
|
|
* Changes migrate type in [start_pfn, end_pfn) to be MIGRATE_ISOLATE.
|
|
|
|
|
*/
|
2012-07-31 16:43:50 -07:00
|
|
|
int
|
2012-04-03 15:06:15 +02:00
|
|
|
start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
|
2018-12-28 00:33:56 -08:00
|
|
|
unsigned migratetype, int flags);
|
2007-10-16 01:26:11 -07:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Changes MIGRATE_ISOLATE to MIGRATE_MOVABLE.
|
|
|
|
|
* target range is [start_pfn, end_pfn)
|
|
|
|
|
*/
|
2019-07-11 20:54:49 -07:00
|
|
|
void
|
2012-04-03 15:06:15 +02:00
|
|
|
undo_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
|
|
|
|
|
unsigned migratetype);
|
2007-10-16 01:26:11 -07:00
|
|
|
|
|
|
|
|
/*
|
2012-04-03 15:06:15 +02:00
|
|
|
* Test all pages in [start_pfn, end_pfn) are isolated or not.
|
2007-10-16 01:26:11 -07:00
|
|
|
*/
|
2012-12-11 16:00:45 -08:00
|
|
|
int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
|
2019-11-30 17:54:07 -08:00
|
|
|
int isol_flags);
|
2007-10-16 01:26:11 -07:00
|
|
|
|
2018-04-10 16:30:03 -07:00
|
|
|
struct page *alloc_migrate_target(struct page *page, unsigned long private);
|
2007-10-16 01:26:11 -07:00
|
|
|
|
|
|
|
|
#endif
|