diff options
Diffstat (limited to 'include/linux/migrate.h')
| -rw-r--r-- | include/linux/migrate.h | 30 | 
1 files changed, 20 insertions, 10 deletions
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 3ef77f52a4f0..6241a1596a75 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -18,6 +18,7 @@ struct migration_target_control;   * - zero on page migration success;   */  #define MIGRATEPAGE_SUCCESS		0 +#define MIGRATEPAGE_UNMAP		1  /**   * struct movable_operations - Driver page migration @@ -61,16 +62,16 @@ extern const char *migrate_reason_names[MR_TYPES];  #ifdef CONFIG_MIGRATION -extern void putback_movable_pages(struct list_head *l); +void putback_movable_pages(struct list_head *l);  int migrate_folio_extra(struct address_space *mapping, struct folio *dst,  		struct folio *src, enum migrate_mode mode, int extra_count);  int migrate_folio(struct address_space *mapping, struct folio *dst,  		struct folio *src, enum migrate_mode mode); -extern int migrate_pages(struct list_head *l, new_page_t new, free_page_t free, -		unsigned long private, enum migrate_mode mode, int reason, -		unsigned int *ret_succeeded); -extern struct page *alloc_migration_target(struct page *page, unsigned long private); -extern int isolate_movable_page(struct page *page, isolate_mode_t mode); +int migrate_pages(struct list_head *l, new_page_t new, free_page_t free, +		  unsigned long private, enum migrate_mode mode, int reason, +		  unsigned int *ret_succeeded); +struct page *alloc_migration_target(struct page *page, unsigned long private); +bool isolate_movable_page(struct page *page, isolate_mode_t mode);  int migrate_huge_page_move_mapping(struct address_space *mapping,  		struct folio *dst, struct folio *src); @@ -91,8 +92,8 @@ static inline int migrate_pages(struct list_head *l, new_page_t new,  static inline struct page *alloc_migration_target(struct page *page,  		unsigned long private)  	{ return NULL; } -static inline int isolate_movable_page(struct page *page, isolate_mode_t mode) -	{ return -EBUSY; } +static inline bool isolate_movable_page(struct page *page, isolate_mode_t mode) +	{ return false; }  static inline int migrate_huge_page_move_mapping(struct address_space *mapping,  				  struct folio *dst, struct folio *src) @@ -123,6 +124,15 @@ static inline bool folio_test_movable(struct folio *folio)  }  static inline +const struct movable_operations *folio_movable_ops(struct folio *folio) +{ +	VM_BUG_ON(!__folio_test_movable(folio)); + +	return (const struct movable_operations *) +		((unsigned long)folio->mapping - PAGE_MAPPING_MOVABLE); +} + +static inline  const struct movable_operations *page_movable_ops(struct page *page)  {  	VM_BUG_ON(!__PageMovable(page)); @@ -132,8 +142,8 @@ const struct movable_operations *page_movable_ops(struct page *page)  }  #ifdef CONFIG_NUMA_BALANCING -extern int migrate_misplaced_page(struct page *page, -				  struct vm_area_struct *vma, int node); +int migrate_misplaced_page(struct page *page, struct vm_area_struct *vma, +			   int node);  #else  static inline int migrate_misplaced_page(struct page *page,  					 struct vm_area_struct *vma, int node)  | 
