aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/memory_hotplug.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/memory_hotplug.h')
-rw-r--r--include/linux/memory_hotplug.h29
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;
13struct mem_section; 13struct mem_section;
14struct memory_block; 14struct memory_block;
15struct resource; 15struct resource;
16struct 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
127extern bool is_pageblock_removable_nolock(struct page *page); 128extern bool is_pageblock_removable_nolock(struct page *page);
128extern int arch_remove_memory(u64 start, u64 size); 129extern int arch_remove_memory(u64 start, u64 size,
130 struct vmem_altmap *altmap);
129extern int __remove_pages(struct zone *zone, unsigned long start_pfn, 131extern 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 */
134extern int __add_pages(int nid, unsigned long start_pfn, 136extern 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
138static inline int add_pages(int nid, unsigned long start_pfn, 140static 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 */
144int add_pages(int nid, unsigned long start_pfn, 147int 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 *));
319extern int add_memory(int nid, u64 start, u64 size); 322extern int add_memory(int nid, u64 start, u64 size);
320extern int add_memory_resource(int nid, struct resource *resource, bool online); 323extern int add_memory_resource(int nid, struct resource *resource, bool online);
321extern int arch_add_memory(int nid, u64 start, u64 size, bool want_memblock); 324extern int arch_add_memory(int nid, u64 start, u64 size,
325 struct vmem_altmap *altmap, bool want_memblock);
322extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, 326extern 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);
324extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); 328extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
325extern bool is_memblock_offlined(struct memory_block *mem); 329extern bool is_memblock_offlined(struct memory_block *mem);
326extern void remove_memory(int nid, u64 start, u64 size); 330extern void remove_memory(int nid, u64 start, u64 size);
327extern int sparse_add_one_section(struct pglist_data *pgdat, unsigned long start_pfn); 331extern int sparse_add_one_section(struct pglist_data *pgdat,
332 unsigned long start_pfn, struct vmem_altmap *altmap);
328extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms, 333extern 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);
330extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map, 335extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map,
331 unsigned long pnum); 336 unsigned long pnum);
332extern bool allow_online_pfn_range(int nid, unsigned long pfn, unsigned long nr_pages, 337extern bool allow_online_pfn_range(int nid, unsigned long pfn, unsigned long nr_pages,