diff options
Diffstat (limited to 'include/linux/migrate.h')
-rw-r--r-- | include/linux/migrate.h | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 0b5865c61efd..1e9f627967a3 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h | |||
@@ -23,6 +23,15 @@ typedef struct page *new_page_t(struct page *, unsigned long private, int **); | |||
23 | #define MIGRATEPAGE_BALLOON_SUCCESS 1 /* special ret code for balloon page | 23 | #define MIGRATEPAGE_BALLOON_SUCCESS 1 /* special ret code for balloon page |
24 | * sucessful migration case. | 24 | * sucessful migration case. |
25 | */ | 25 | */ |
26 | enum migrate_reason { | ||
27 | MR_COMPACTION, | ||
28 | MR_MEMORY_FAILURE, | ||
29 | MR_MEMORY_HOTPLUG, | ||
30 | MR_SYSCALL, /* also applies to cpusets */ | ||
31 | MR_MEMPOLICY_MBIND, | ||
32 | MR_NUMA_MISPLACED, | ||
33 | MR_CMA | ||
34 | }; | ||
26 | 35 | ||
27 | #ifdef CONFIG_MIGRATION | 36 | #ifdef CONFIG_MIGRATION |
28 | 37 | ||
@@ -32,7 +41,7 @@ extern int migrate_page(struct address_space *, | |||
32 | struct page *, struct page *, enum migrate_mode); | 41 | struct page *, struct page *, enum migrate_mode); |
33 | extern int migrate_pages(struct list_head *l, new_page_t x, | 42 | extern int migrate_pages(struct list_head *l, new_page_t x, |
34 | unsigned long private, bool offlining, | 43 | unsigned long private, bool offlining, |
35 | enum migrate_mode mode); | 44 | enum migrate_mode mode, int reason); |
36 | extern int migrate_huge_page(struct page *, new_page_t x, | 45 | extern int migrate_huge_page(struct page *, new_page_t x, |
37 | unsigned long private, bool offlining, | 46 | unsigned long private, bool offlining, |
38 | enum migrate_mode mode); | 47 | enum migrate_mode mode); |
@@ -54,7 +63,7 @@ static inline void putback_lru_pages(struct list_head *l) {} | |||
54 | static inline void putback_movable_pages(struct list_head *l) {} | 63 | static inline void putback_movable_pages(struct list_head *l) {} |
55 | static inline int migrate_pages(struct list_head *l, new_page_t x, | 64 | static inline int migrate_pages(struct list_head *l, new_page_t x, |
56 | unsigned long private, bool offlining, | 65 | unsigned long private, bool offlining, |
57 | enum migrate_mode mode) { return -ENOSYS; } | 66 | enum migrate_mode mode, int reason) { return -ENOSYS; } |
58 | static inline int migrate_huge_page(struct page *page, new_page_t x, | 67 | static inline int migrate_huge_page(struct page *page, new_page_t x, |
59 | unsigned long private, bool offlining, | 68 | unsigned long private, bool offlining, |
60 | enum migrate_mode mode) { return -ENOSYS; } | 69 | enum migrate_mode mode) { return -ENOSYS; } |
@@ -83,4 +92,37 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, | |||
83 | #define fail_migrate_page NULL | 92 | #define fail_migrate_page NULL |
84 | 93 | ||
85 | #endif /* CONFIG_MIGRATION */ | 94 | #endif /* CONFIG_MIGRATION */ |
95 | |||
96 | #ifdef CONFIG_NUMA_BALANCING | ||
97 | extern int migrate_misplaced_page(struct page *page, int node); | ||
98 | extern int migrate_misplaced_page(struct page *page, int node); | ||
99 | extern bool migrate_ratelimited(int node); | ||
100 | #else | ||
101 | static inline int migrate_misplaced_page(struct page *page, int node) | ||
102 | { | ||
103 | return -EAGAIN; /* can't migrate now */ | ||
104 | } | ||
105 | static inline bool migrate_ratelimited(int node) | ||
106 | { | ||
107 | return false; | ||
108 | } | ||
109 | #endif /* CONFIG_NUMA_BALANCING */ | ||
110 | |||
111 | #if defined(CONFIG_NUMA_BALANCING) && defined(CONFIG_TRANSPARENT_HUGEPAGE) | ||
112 | extern int migrate_misplaced_transhuge_page(struct mm_struct *mm, | ||
113 | struct vm_area_struct *vma, | ||
114 | pmd_t *pmd, pmd_t entry, | ||
115 | unsigned long address, | ||
116 | struct page *page, int node); | ||
117 | #else | ||
118 | static inline int migrate_misplaced_transhuge_page(struct mm_struct *mm, | ||
119 | struct vm_area_struct *vma, | ||
120 | pmd_t *pmd, pmd_t entry, | ||
121 | unsigned long address, | ||
122 | struct page *page, int node) | ||
123 | { | ||
124 | return -EAGAIN; | ||
125 | } | ||
126 | #endif /* CONFIG_NUMA_BALANCING && CONFIG_TRANSPARENT_HUGEPAGE*/ | ||
127 | |||
86 | #endif /* _LINUX_MIGRATE_H */ | 128 | #endif /* _LINUX_MIGRATE_H */ |