This is the backport of the following fixes for 4.19-stable: - a31b264c2b41 ("mm/memory_hotplug: make unregister_memory_block_under_nodes() never fail") -- Turned out to not only be a cleanup but also a fix - 2c91f8fc6c99 ("mm/memory_hotplug: fix try_offline_node()") -- Automatic stable backport failed due to missing dependencies. - feee6b298916 ("mm/memory_hotplug: shrink zones when offlining memory") -- Was marked as stable 5.0+ due to the backport complexity,, but it's also relevant for 4.19/4.14. As I have to backport quite some cleanups already ... To minimize manual code changes, I decided to pull in quite some cleanups. Still some manual code changes are necessary (indicated in the individual patches). Especially missing arm64 hot(un)plug, missing sub-section hotadd support, and missing unification of mm/hmm.c and kernel/memremap.c requires care. Due to: - 4e0d2e7ef14d ("mm, sparse: pass nid instead of pgdat to sparse_add_one_section()") I need: - afe9b36ca890 ("mm/memunmap: don't access uninitialized memmap in memunmap_pages()") Please note that: - 4c4b7f9ba948 ("mm/memory_hotplug: remove memory block devices before arch_remove_memory()") Makes big (e.g., 32TB) machines boot up slower (e.g., 2h vs 10m). There is a performance fix in linux-next, but it does not seem to classify as a fix for current RC / stable. I did quite some testing with hot(un)plug, onlining/offlining of memory blocks and memory-less/CPU-less NUMA nodes under x86_64 - the same set of tests I run against upstream on a fairly regular basis. I compile-tested on PowerPC. I did not test any ZONE_DEVICE/HMM thingies. Let's see what people think - it's a lot of patches. If we want this, then I can try to prepare a similar set for 4.4-stable. CCing only some people to minimize noise. Cc: Oscar Salvador <osalvador@xxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: Dan Williams <dan.j.williams@xxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Laurent Vivier <lvivier@xxxxxxxxxx> Cc: Baoquan He <bhe@xxxxxxxxxx> David Hildenbrand (25): mm/memory_hotplug: make remove_memory() take the device_hotplug_lock mm, sparse: drop pgdat_resize_lock in sparse_add/remove_one_section() mm, sparse: pass nid instead of pgdat to sparse_add_one_section() drivers/base/memory.c: remove an unnecessary check on NR_MEM_SECTIONS mm, memory_hotplug: add nid parameter to arch_remove_memory mm/memory_hotplug: release memory resource after arch_remove_memory() drivers/base/memory.c: clean up relics in function parameters mm, memory_hotplug: update a comment in unregister_memory() mm/memory_hotplug: make unregister_memory_section() never fail mm/memory_hotplug: make __remove_section() never fail powerpc/mm: Fix section mismatch warning powerpc/mm: move warning from resize_hpt_for_hotplug() mm/memory_hotplug: make __remove_pages() and arch_remove_memory() never fail s390x/mm: implement arch_remove_memory() mm/memory_hotplug: allow arch_remove_memory() without CONFIG_MEMORY_HOTREMOVE drivers/base/memory: pass a block_id to init_memory_block() mm/memory_hotplug: create memory block devices after arch_add_memory() mm/memory_hotplug: remove memory block devices before arch_remove_memory() mm/memory_hotplug: make unregister_memory_block_under_nodes() never fail mm/memory_hotplug: remove "zone" parameter from sparse_remove_one_section mm/hotplug: kill is_dev_zone() usage in __remove_pages() drivers/base/node.c: simplify unregister_memory_block_under_nodes() mm/memunmap: don't access uninitialized memmap in memunmap_pages() mm/memory_hotplug: fix try_offline_node() mm/memory_hotplug: shrink zones when offlining memory arch/ia64/mm/init.c | 15 +- arch/powerpc/include/asm/sparsemem.h | 4 +- arch/powerpc/mm/hash_utils_64.c | 19 +- arch/powerpc/mm/mem.c | 28 +-- arch/powerpc/platforms/powernv/memtrace.c | 2 +- .../platforms/pseries/hotplug-memory.c | 6 +- arch/powerpc/platforms/pseries/lpar.c | 3 +- arch/s390/mm/init.c | 18 +- arch/sh/mm/init.c | 15 +- arch/x86/mm/init_32.c | 9 +- arch/x86/mm/init_64.c | 17 +- drivers/acpi/acpi_memhotplug.c | 2 +- drivers/base/memory.c | 203 +++++++++++------- drivers/base/node.c | 52 ++--- include/linux/memory.h | 8 +- include/linux/memory_hotplug.h | 22 +- include/linux/mmzone.h | 3 +- include/linux/node.h | 7 +- kernel/memremap.c | 13 +- mm/hmm.c | 8 +- mm/memory_hotplug.c | 166 +++++++------- mm/sparse.c | 27 +-- 22 files changed, 318 insertions(+), 329 deletions(-) -- 2.24.1