diff options
Diffstat (limited to 'include/linux/memory_hotplug.h')
-rw-r--r-- | include/linux/memory_hotplug.h | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 58e110aee7ab..aba5f86eb038 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
@@ -13,6 +13,7 @@ struct pglist_data; | |||
13 | struct mem_section; | 13 | struct mem_section; |
14 | struct memory_block; | 14 | struct memory_block; |
15 | struct resource; | 15 | struct resource; |
16 | struct vmem_altmap; | ||
16 | 17 | ||
17 | #ifdef CONFIG_MEMORY_HOTPLUG | 18 | #ifdef CONFIG_MEMORY_HOTPLUG |
18 | /* | 19 | /* |
@@ -125,24 +126,26 @@ static inline bool movable_node_is_enabled(void) | |||
125 | 126 | ||
126 | #ifdef CONFIG_MEMORY_HOTREMOVE | 127 | #ifdef CONFIG_MEMORY_HOTREMOVE |
127 | extern bool is_pageblock_removable_nolock(struct page *page); | 128 | extern bool is_pageblock_removable_nolock(struct page *page); |
128 | extern int arch_remove_memory(u64 start, u64 size); | 129 | extern int arch_remove_memory(u64 start, u64 size, |
130 | struct vmem_altmap *altmap); | ||
129 | extern int __remove_pages(struct zone *zone, unsigned long start_pfn, | 131 | extern int __remove_pages(struct zone *zone, unsigned long start_pfn, |
130 | unsigned long nr_pages); | 132 | unsigned long nr_pages, struct vmem_altmap *altmap); |
131 | #endif /* CONFIG_MEMORY_HOTREMOVE */ | 133 | #endif /* CONFIG_MEMORY_HOTREMOVE */ |
132 | 134 | ||
133 | /* reasonably generic interface to expand the physical pages */ | 135 | /* reasonably generic interface to expand the physical pages */ |
134 | extern int __add_pages(int nid, unsigned long start_pfn, | 136 | extern int __add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, |
135 | unsigned long nr_pages, bool want_memblock); | 137 | struct vmem_altmap *altmap, bool want_memblock); |
136 | 138 | ||
137 | #ifndef CONFIG_ARCH_HAS_ADD_PAGES | 139 | #ifndef CONFIG_ARCH_HAS_ADD_PAGES |
138 | static inline int add_pages(int nid, unsigned long start_pfn, | 140 | static inline int add_pages(int nid, unsigned long start_pfn, |
139 | unsigned long nr_pages, bool want_memblock) | 141 | unsigned long nr_pages, struct vmem_altmap *altmap, |
142 | bool want_memblock) | ||
140 | { | 143 | { |
141 | return __add_pages(nid, start_pfn, nr_pages, want_memblock); | 144 | return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); |
142 | } | 145 | } |
143 | #else /* ARCH_HAS_ADD_PAGES */ | 146 | #else /* ARCH_HAS_ADD_PAGES */ |
144 | int add_pages(int nid, unsigned long start_pfn, | 147 | int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, |
145 | unsigned long nr_pages, bool want_memblock); | 148 | struct vmem_altmap *altmap, bool want_memblock); |
146 | #endif /* ARCH_HAS_ADD_PAGES */ | 149 | #endif /* ARCH_HAS_ADD_PAGES */ |
147 | 150 | ||
148 | #ifdef CONFIG_NUMA | 151 | #ifdef CONFIG_NUMA |
@@ -318,15 +321,17 @@ extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn, | |||
318 | void *arg, int (*func)(struct memory_block *, void *)); | 321 | void *arg, int (*func)(struct memory_block *, void *)); |
319 | extern int add_memory(int nid, u64 start, u64 size); | 322 | extern int add_memory(int nid, u64 start, u64 size); |
320 | extern int add_memory_resource(int nid, struct resource *resource, bool online); | 323 | extern int add_memory_resource(int nid, struct resource *resource, bool online); |
321 | extern int arch_add_memory(int nid, u64 start, u64 size, bool want_memblock); | 324 | extern int arch_add_memory(int nid, u64 start, u64 size, |
325 | struct vmem_altmap *altmap, bool want_memblock); | ||
322 | extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, | 326 | extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, |
323 | unsigned long nr_pages); | 327 | unsigned long nr_pages, struct vmem_altmap *altmap); |
324 | extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); | 328 | extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); |
325 | extern bool is_memblock_offlined(struct memory_block *mem); | 329 | extern bool is_memblock_offlined(struct memory_block *mem); |
326 | extern void remove_memory(int nid, u64 start, u64 size); | 330 | extern void remove_memory(int nid, u64 start, u64 size); |
327 | extern int sparse_add_one_section(struct pglist_data *pgdat, unsigned long start_pfn); | 331 | extern int sparse_add_one_section(struct pglist_data *pgdat, |
332 | unsigned long start_pfn, struct vmem_altmap *altmap); | ||
328 | extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms, | 333 | extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms, |
329 | unsigned long map_offset); | 334 | unsigned long map_offset, struct vmem_altmap *altmap); |
330 | extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map, | 335 | extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map, |
331 | unsigned long pnum); | 336 | unsigned long pnum); |
332 | extern bool allow_online_pfn_range(int nid, unsigned long pfn, unsigned long nr_pages, | 337 | extern bool allow_online_pfn_range(int nid, unsigned long pfn, unsigned long nr_pages, |