mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-11 00:51:47 +00:00
mm, memory_hotplug: provide a more generic restrictions for memory hotplug
arch_add_memory, __add_pages take a want_memblock which controls whether the newly added memory should get the sysfs memblock user API (e.g. ZONE_DEVICE users do not want/need this interface). Some callers even want to control where do we allocate the memmap from by configuring altmap. Add a more generic hotplug context for arch_add_memory and __add_pages. struct mhp_restrictions contains flags which contains additional features to be enabled by the memory hotplug (MHP_MEMBLOCK_API currently) and altmap for alternative memmap allocator. This patch shouldn't introduce any functional change. [akpm@linux-foundation.org: build fix] Link: http://lkml.kernel.org/r/20190408082633.2864-3-osalvador@suse.de Signed-off-by: Michal Hocko <mhocko@suse.com> Signed-off-by: Oscar Salvador <osalvador@suse.de> Cc: Dan Williams <dan.j.williams@intel.com> Cc: David Hildenbrand <david@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5557c766ab
commit
940519f0c8
10 changed files with 63 additions and 37 deletions
|
@ -53,6 +53,16 @@ enum {
|
|||
MMOP_ONLINE_MOVABLE,
|
||||
};
|
||||
|
||||
/*
|
||||
* Restrictions for the memory hotplug:
|
||||
* flags: MHP_ flags
|
||||
* altmap: alternative allocator for memmap array
|
||||
*/
|
||||
struct mhp_restrictions {
|
||||
unsigned long flags;
|
||||
struct vmem_altmap *altmap;
|
||||
};
|
||||
|
||||
/*
|
||||
* Zone resizing functions
|
||||
*
|
||||
|
@ -101,6 +111,8 @@ extern void __online_page_free(struct page *page);
|
|||
|
||||
extern int try_online_node(int nid);
|
||||
|
||||
extern int arch_add_memory(int nid, u64 start, u64 size,
|
||||
struct mhp_restrictions *restrictions);
|
||||
extern u64 max_mem_size;
|
||||
|
||||
extern bool memhp_auto_online;
|
||||
|
@ -118,20 +130,27 @@ extern int __remove_pages(struct zone *zone, unsigned long start_pfn,
|
|||
unsigned long nr_pages, struct vmem_altmap *altmap);
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
|
||||
/*
|
||||
* Do we want sysfs memblock files created. This will allow userspace to online
|
||||
* and offline memory explicitly. Lack of this bit means that the caller has to
|
||||
* call move_pfn_range_to_zone to finish the initialization.
|
||||
*/
|
||||
|
||||
#define MHP_MEMBLOCK_API (1<<0)
|
||||
|
||||
/* reasonably generic interface to expand the physical pages */
|
||||
extern int __add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages,
|
||||
struct vmem_altmap *altmap, bool want_memblock);
|
||||
struct mhp_restrictions *restrictions);
|
||||
|
||||
#ifndef CONFIG_ARCH_HAS_ADD_PAGES
|
||||
static inline int add_pages(int nid, unsigned long start_pfn,
|
||||
unsigned long nr_pages, struct vmem_altmap *altmap,
|
||||
bool want_memblock)
|
||||
unsigned long nr_pages, struct mhp_restrictions *restrictions)
|
||||
{
|
||||
return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock);
|
||||
return __add_pages(nid, start_pfn, nr_pages, restrictions);
|
||||
}
|
||||
#else /* ARCH_HAS_ADD_PAGES */
|
||||
int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages,
|
||||
struct vmem_altmap *altmap, bool want_memblock);
|
||||
struct mhp_restrictions *restrictions);
|
||||
#endif /* ARCH_HAS_ADD_PAGES */
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
|
@ -332,8 +351,6 @@ extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn,
|
|||
extern int __add_memory(int nid, u64 start, u64 size);
|
||||
extern int add_memory(int nid, u64 start, u64 size);
|
||||
extern int add_memory_resource(int nid, struct resource *resource);
|
||||
extern int arch_add_memory(int nid, u64 start, u64 size,
|
||||
struct vmem_altmap *altmap, bool want_memblock);
|
||||
extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn,
|
||||
unsigned long nr_pages, struct vmem_altmap *altmap);
|
||||
extern bool is_memblock_offlined(struct memory_block *mem);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue