Re: [PATCH v8 0/6] mm: Fix vmemmap optimization accounting and initialization
From: Liam R. Howlett
Date: Tue Apr 28 2026 - 10:22:37 EST
On 26/04/28 04:18PM, Muchun Song wrote:
> The series fixes several bugs in vmemmap optimization, mainly around
> incorrect page accounting and memmap initialization in DAX and memory
> hotplug paths. It also fixes pageblock migratetype initialization and
> struct page initialization for ZONE_DEVICE compound pages.
>
> Patches 1-4 fix vmemmap accounting issues. Patch 1 fixes an accounting
> underflow in the section activation failure path by moving vmemmap page
> accounting into the lower-level allocation and freeing helpers. Patch 2
> fixes incorrect altmap passing in the memory hotplug error path. Patch 3
> passes pgmap through memory deactivation paths so the teardown side can
> determine whether vmemmap optimization was in effect. Patch 4 uses that
> information to account the optimized DAX vmemmap size correctly.
>
> Patches 5-6 fix initialization issues in mm/mm_init. One makes sure all
> pageblocks in ZONE_DEVICE compound pages get their migratetype
> initialized. The other fixes a case where DAX memory hotplug reuses an
> unoptimized early-section memmap while compound_nr_pages() still assumes
> vmemmap optimization, leaving tail struct pages uninitialized.
>
> Changes in v8:
> - In patch 4, move VM_WARN_ON_ONCE(nr_pages > PAGES_PER_SECTION) to the
> top of section_nr_vmemmap_pages().
> - In patch 4, add Acked-by from David Hildenbrand.
Thanks!
Acked-by: Liam R. Howlett <liam@xxxxxxxxxxxxx>
>
> Muchun Song (6):
> mm/sparse-vmemmap: Fix vmemmap accounting underflow
> mm/memory_hotplug: Fix incorrect altmap passing in error path
> mm/sparse-vmemmap: Pass @pgmap argument to memory deactivation paths
> mm/sparse-vmemmap: Fix DAX vmemmap accounting with optimization
> mm/mm_init: Fix pageblock migratetype for ZONE_DEVICE compound pages
> mm/mm_init: Fix uninitialized struct pages for ZONE_DEVICE
>
> arch/arm64/mm/mmu.c | 5 +--
> arch/loongarch/mm/init.c | 5 +--
> arch/powerpc/mm/mem.c | 5 +--
> arch/riscv/mm/init.c | 5 +--
> arch/s390/mm/init.c | 5 +--
> arch/x86/mm/init_64.c | 5 +--
> include/linux/memory_hotplug.h | 8 +++--
> mm/memory_hotplug.c | 13 ++++----
> mm/memremap.c | 4 +--
> mm/mm_init.c | 47 ++++++++++++++++-----------
> mm/sparse-vmemmap.c | 58 ++++++++++++++++++++++++++--------
> 11 files changed, 105 insertions(+), 55 deletions(-)
>
>
> base-commit: 39704f00f747aba3144289870b5fd8ac230a9aaf
> --
> 2.20.1
>
>