[PATCH v6 0/5] sparse_init rewrite

From: Pavel Tatashin
Date: Mon Jul 16 2018 - 13:45:29 EST


Changelog:
v6 - v5
- Removed one more obsolete function, as Oscar noticed
- Replaced BUG_ON with WARN_ON, ALIGN with PTR_ALIGN.
- Added review-by, and test-by.

v5 - v4
- Fixed the issue that was reported on ppc64 when
CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER is removed
- Consolidated the new buffer allocation between vmemmap
and non-vmemmap variants of sparse layout.
- Removed all review-by comments, because I had to do
significant amount of changes compared to previous version
and need another round of review.
- I also would appreciate if those who reported problems with
PPC64 could test this change.
v4 - v3
- Addressed comments from Dave Hansen
v3 - v1
- Fixed two issues found by Baoquan He
v1 - v2
- Addressed comments from Oscar Salvador

In sparse_init() we allocate two large buffers to temporary hold usemap and
memmap for the whole machine. However, we can avoid doing that if we
changed sparse_init() to operated on per-node bases instead of doing it on
the whole machine beforehand.

As shown by Baoquan
http://lkml.kernel.org/r/20180628062857.29658-1-bhe@xxxxxxxxxx

The buffers are large enough to cause machine stop to boot on small memory
systems.

Another benefit of these changes is that they also obsolete
CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER.

Pavel Tatashin (5):
mm/sparse: abstract sparse buffer allocations
mm/sparse: use the new sparse buffer functions in non-vmemmap
mm/sparse: move buffer init/fini to the common place
mm/sparse: add new sparse_init_nid() and sparse_init()
mm/sparse: delete old sparse_init and enable new one

include/linux/mm.h | 7 +-
mm/Kconfig | 4 -
mm/sparse-vmemmap.c | 59 +--------
mm/sparse.c | 314 ++++++++++++++------------------------------
4 files changed, 102 insertions(+), 282 deletions(-)

--
2.18.0