linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH for 4.19-stable v2 00/24] mm/memory_hotplug: backport of pending stable fixes
@ 2020-01-21 18:01 David Hildenbrand
  2020-01-21 18:01 ` [PATCH for 4.19-stable v2 01/24] mm/memory_hotplug: make remove_memory() take the device_hotplug_lock David Hildenbrand
                   ` (23 more replies)
  0 siblings, 24 replies; 28+ messages in thread
From: David Hildenbrand @ 2020-01-21 18:01 UTC (permalink / raw)
  To: stable
  Cc: linux-mm, Michal Hocko, Greg Kroah-Hartman, Andrew Morton,
	Aneesh Kumar K . V, Baoquan He, Dan Williams, Oscar Salvador,
	Wei Yang

This is the backport of the following fixes for 4.19-stable:

- d84f2f5a7552 ("drivers/base/node.c: simplify
  unregister_memory_block_under_nodes()")
-- 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 ...

All tackle memory unplug issues, especially when memory was never
onlined (or onlining failed), paired with memory unplug. When trying to
access garbage memmaps we crash the kernel (e.g., because the derviced
pgdat pointer is broken)

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, arm64, s390x, i386 and sh. I did not test any ZONE_DEVICE/HMM
thingies.

v1 -> v2:
- Fix patch authors
- Dropped "mm/memory_hotplug: make __remove_pages() and
  arch_remove_memory() never fail"
-- Only creates a minor conflict in another patch
- "mm/memory_hotplug: make remove_memory() take the device_hotplug_lock"
-- Fix wrong upstream commit id
- "mm/memory_hotplug: shrink zones when offlining memory"
- "mm/memunmap: don't access uninitialized memmap in memunmap_pages()"
-- Fix usage of wrong pfn

CCing only some people to minimize noise.

Cc: Michal Hocko <mhocko@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: Baoquan He <bhe@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Wei Yang <richard.weiyang@gmail.com>

Aneesh Kumar K.V (2):
  powerpc/mm: Fix section mismatch warning
  mm/memunmap: don't access uninitialized memmap in memunmap_pages()

Baoquan He (1):
  drivers/base/memory.c: clean up relics in function parameters

Dan Carpenter (1):
  mm, memory_hotplug: update a comment in unregister_memory()

Dan Williams (1):
  mm/hotplug: kill is_dev_zone() usage in __remove_pages()

David Hildenbrand (15):
  mm/memory_hotplug: make remove_memory() take the device_hotplug_lock
  mm, memory_hotplug: add nid parameter to arch_remove_memory
  mm/memory_hotplug: make unregister_memory_section() never fail
  mm/memory_hotplug: make __remove_section() never fail
  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
  drivers/base/node.c: simplify unregister_memory_block_under_nodes()
  mm/memory_hotplug: fix try_offline_node()
  mm/memory_hotplug: shrink zones when offlining memory

Oscar Salvador (1):
  mm/memory_hotplug: release memory resource after arch_remove_memory()

Wei Yang (3):
  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

 arch/ia64/mm/init.c                           |  15 +-
 arch/powerpc/mm/mem.c                         |  25 +--
 arch/powerpc/platforms/powernv/memtrace.c     |   2 +-
 .../platforms/pseries/hotplug-memory.c        |   6 +-
 arch/s390/mm/init.c                           |  16 +-
 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                             |  12 +-
 mm/hmm.c                                      |   8 +-
 mm/memory_hotplug.c                           | 166 +++++++-------
 mm/sparse.c                                   |  27 +--
 19 files changed, 303 insertions(+), 312 deletions(-)

-- 
2.24.1



^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2020-01-24  9:24 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-21 18:01 [PATCH for 4.19-stable v2 00/24] mm/memory_hotplug: backport of pending stable fixes David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 01/24] mm/memory_hotplug: make remove_memory() take the device_hotplug_lock David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 02/24] mm, sparse: drop pgdat_resize_lock in sparse_add/remove_one_section() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 03/24] mm, sparse: pass nid instead of pgdat to sparse_add_one_section() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 04/24] drivers/base/memory.c: remove an unnecessary check on NR_MEM_SECTIONS David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 05/24] mm, memory_hotplug: add nid parameter to arch_remove_memory David Hildenbrand
2020-01-22  9:25   ` David Hildenbrand
2020-01-24  9:23     ` Greg Kroah-Hartman
2020-01-24  9:24       ` David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 06/24] mm/memory_hotplug: release memory resource after arch_remove_memory() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 07/24] drivers/base/memory.c: clean up relics in function parameters David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 08/24] mm, memory_hotplug: update a comment in unregister_memory() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 09/24] mm/memory_hotplug: make unregister_memory_section() never fail David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 10/24] mm/memory_hotplug: make __remove_section() " David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 11/24] powerpc/mm: Fix section mismatch warning David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 12/24] mm/memory_hotplug: make __remove_pages() and arch_remove_memory() never fail David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 13/24] s390x/mm: implement arch_remove_memory() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 14/24] mm/memory_hotplug: allow arch_remove_memory() without CONFIG_MEMORY_HOTREMOVE David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 15/24] drivers/base/memory: pass a block_id to init_memory_block() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 16/24] mm/memory_hotplug: create memory block devices after arch_add_memory() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 17/24] mm/memory_hotplug: remove memory block devices before arch_remove_memory() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 18/24] mm/memory_hotplug: make unregister_memory_block_under_nodes() never fail David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 19/24] mm/memory_hotplug: remove "zone" parameter from sparse_remove_one_section David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 20/24] mm/hotplug: kill is_dev_zone() usage in __remove_pages() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 21/24] drivers/base/node.c: simplify unregister_memory_block_under_nodes() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 22/24] mm/memunmap: don't access uninitialized memmap in memunmap_pages() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 23/24] mm/memory_hotplug: fix try_offline_node() David Hildenbrand
2020-01-21 18:01 ` [PATCH for 4.19-stable v2 24/24] mm/memory_hotplug: shrink zones when offlining memory David Hildenbrand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).