Blame view

kernel/linux-rt-4.4.41/include/linux/migrate.h 2.99 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  #ifndef _LINUX_MIGRATE_H
  #define _LINUX_MIGRATE_H
  
  #include <linux/mm.h>
  #include <linux/mempolicy.h>
  #include <linux/migrate_mode.h>
  
  typedef struct page *new_page_t(struct page *page, unsigned long private,
  				int **reason);
  typedef void free_page_t(struct page *page, unsigned long private);
  
  /*
   * Return values from addresss_space_operations.migratepage():
   * - negative errno on page migration failure;
   * - zero on page migration success;
   */
  #define MIGRATEPAGE_SUCCESS		0
  
  enum migrate_reason {
  	MR_COMPACTION,
  	MR_MEMORY_FAILURE,
  	MR_MEMORY_HOTPLUG,
  	MR_SYSCALL,		/* also applies to cpusets */
  	MR_MEMPOLICY_MBIND,
  	MR_NUMA_MISPLACED,
  	MR_CMA
  };
  
  #ifdef CONFIG_MIGRATION
  
  extern void putback_movable_pages(struct list_head *l);
  extern int migrate_page(struct address_space *,
  			struct page *, struct page *, enum migrate_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);
  
  extern int migrate_prep(void);
  extern int migrate_prep_local(void);
  extern void migrate_page_copy(struct page *newpage, struct page *page);
  extern int migrate_huge_page_move_mapping(struct address_space *mapping,
  				  struct page *newpage, struct page *page);
  extern int migrate_page_move_mapping(struct address_space *mapping,
  		struct page *newpage, struct page *page,
  		struct buffer_head *head, enum migrate_mode mode,
  		int extra_count);
  #else
  
  static inline void putback_movable_pages(struct list_head *l) {}
  static inline int migrate_pages(struct list_head *l, new_page_t new,
  		free_page_t free, unsigned long private, enum migrate_mode mode,
  		int reason)
  	{ return -ENOSYS; }
  
  static inline int migrate_prep(void) { return -ENOSYS; }
  static inline int migrate_prep_local(void) { return -ENOSYS; }
  
  static inline void migrate_page_copy(struct page *newpage,
  				     struct page *page) {}
  
  static inline int migrate_huge_page_move_mapping(struct address_space *mapping,
  				  struct page *newpage, struct page *page)
  {
  	return -ENOSYS;
  }
  
  #endif /* CONFIG_MIGRATION */
  
  #ifdef CONFIG_NUMA_BALANCING
  extern bool pmd_trans_migrating(pmd_t pmd);
  extern int migrate_misplaced_page(struct page *page,
  				  struct vm_area_struct *vma, int node);
  #else
  static inline bool pmd_trans_migrating(pmd_t pmd)
  {
  	return false;
  }
  static inline int migrate_misplaced_page(struct page *page,
  					 struct vm_area_struct *vma, int node)
  {
  	return -EAGAIN; /* can't migrate now */
  }
  #endif /* CONFIG_NUMA_BALANCING */
  
  #if defined(CONFIG_NUMA_BALANCING) && defined(CONFIG_TRANSPARENT_HUGEPAGE)
  extern int migrate_misplaced_transhuge_page(struct mm_struct *mm,
  			struct vm_area_struct *vma,
  			pmd_t *pmd, pmd_t entry,
  			unsigned long address,
  			struct page *page, int node);
  #else
  static inline int migrate_misplaced_transhuge_page(struct mm_struct *mm,
  			struct vm_area_struct *vma,
  			pmd_t *pmd, pmd_t entry,
  			unsigned long address,
  			struct page *page, int node)
  {
  	return -EAGAIN;
  }
  #endif /* CONFIG_NUMA_BALANCING && CONFIG_TRANSPARENT_HUGEPAGE*/
  
  #endif /* _LINUX_MIGRATE_H */