This patch series fixes a number of issues related to vmemmap optimization for compound pages (e.g., DAX), including incorrect page accounting and missing architecture-specific initialization steps.
The series addresses these issues through the following steps: - Patch 1: Fixes a vmemmap accounting underflow in error paths. - Patch 2-3: Fixes DAX vmemmap accounting by plumbing the pgmap argument through memory deactivation paths. - Patch 4-5: Fixes missing architecture-specific page table syncs by plumbing the pgmap argument through vmemmap_populate APIs. - Patch 6: Fixes pageblock migratetype initialization for large compound ZONE_DEVICE pages. Changelog: v1 -> v2: - Moved vmemmap accounting to populate_section_memmap() / depopulate_section_memmap() to fix accounting underflow, suggested by Mike. - Replaced VM_BUG_ON with VM_WARN_ON_ONCE as requested by David. - Reduced frequency of calling cond_resched() in pageblock_migratetype_init_range() based on feedback from David and Mike. - Extracted all bugfix patches from a larger patchset (https://lore.kernel.org/linux-mm/[email protected]/) into this separate patchset, suggested by David. Muchun Song (6): mm/sparse-vmemmap: Fix vmemmap accounting underflow mm/sparse-vmemmap: Pass @pgmap argument to memory deactivation paths mm/sparse-vmemmap: Fix DAX vmemmap accounting with optimization mm/sparse-vmemmap: Pass @pgmap argument to arch vmemmap_populate() mm/sparse-vmemmap: Fix missing architecture-specific page table sync mm/mm_init: Fix pageblock migratetype for ZONE_DEVICE compound pages arch/arm64/mm/mmu.c | 11 +-- arch/loongarch/mm/init.c | 12 +-- arch/powerpc/include/asm/book3s/64/radix.h | 9 +-- arch/powerpc/mm/book3s64/radix_pgtable.c | 18 +++-- arch/powerpc/mm/init_64.c | 4 +- arch/powerpc/mm/mem.c | 5 +- arch/riscv/mm/init.c | 9 ++- arch/s390/mm/init.c | 5 +- arch/s390/mm/vmem.c | 2 +- arch/sparc/mm/init_64.c | 5 +- arch/x86/mm/init_64.c | 13 +-- include/linux/memory_hotplug.h | 8 +- include/linux/mm.h | 8 +- mm/hugetlb_vmemmap.c | 4 +- mm/memory_hotplug.c | 12 +-- mm/memremap.c | 4 +- mm/mm_init.c | 42 ++++++---- mm/sparse-vmemmap.c | 93 ++++++++++++++-------- 18 files changed, 160 insertions(+), 104 deletions(-) -- 2.20.1
