mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 16:11:45 +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
|
@ -273,12 +273,12 @@ static int __meminit __add_section(int nid, unsigned long phys_start_pfn,
|
|||
* add the new pages.
|
||||
*/
|
||||
int __ref __add_pages(int nid, unsigned long phys_start_pfn,
|
||||
unsigned long nr_pages, struct vmem_altmap *altmap,
|
||||
bool want_memblock)
|
||||
unsigned long nr_pages, struct mhp_restrictions *restrictions)
|
||||
{
|
||||
unsigned long i;
|
||||
int err = 0;
|
||||
int start_sec, end_sec;
|
||||
struct vmem_altmap *altmap = restrictions->altmap;
|
||||
|
||||
/* during initialize mem_map, align hot-added range to section */
|
||||
start_sec = pfn_to_section_nr(phys_start_pfn);
|
||||
|
@ -299,7 +299,7 @@ int __ref __add_pages(int nid, unsigned long phys_start_pfn,
|
|||
|
||||
for (i = start_sec; i <= end_sec; i++) {
|
||||
err = __add_section(nid, section_nr_to_pfn(i), altmap,
|
||||
want_memblock);
|
||||
restrictions->flags & MHP_MEMBLOCK_API);
|
||||
|
||||
/*
|
||||
* EEXIST is finally dealt with by ioresource collision
|
||||
|
@ -1097,6 +1097,9 @@ static int online_memory_block(struct memory_block *mem, void *arg)
|
|||
*/
|
||||
int __ref add_memory_resource(int nid, struct resource *res)
|
||||
{
|
||||
struct mhp_restrictions restrictions = {
|
||||
.flags = MHP_MEMBLOCK_API,
|
||||
};
|
||||
u64 start, size;
|
||||
bool new_node = false;
|
||||
int ret;
|
||||
|
@ -1124,7 +1127,7 @@ int __ref add_memory_resource(int nid, struct resource *res)
|
|||
new_node = ret;
|
||||
|
||||
/* call arch's memory hotadd */
|
||||
ret = arch_add_memory(nid, start, size, NULL, true);
|
||||
ret = arch_add_memory(nid, start, size, &restrictions);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue