mm: warn on unaligned compound zone device ranges

A compound page of order N must start at a PFN aligned to 2^N pages. 
Therefore, a range used to initialize compound pages must start on a
compound-page boundary and contain an integral number of compound pages.

Two recent Device DAX bugs were caused by ranges that violated this
invariant, but neither was detected by memmap_init_zone_device().

Warn if the adjusted zone-device range violates this invariant so future
violations are reported when the compound pages are initialized.

Link: https://lore.kernel.org/20261016131334.3419393-1-songmuchun@bytedance.com
Link: https://lore.kernel.org/r/20261016053944.2579541-1-songmuchun@bytedance.com
Link: https://lore.kernel.org/r/20261016054914.2601510-1-songmuchun@bytedance.com
Signed-off-by: Muchun Song <muchun.song@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Assisted-by: LLM
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Vishal Verma <vishal.l.verma@intel.com>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Alison Schofield <alison.schofield@intel.com>
Cc: Joao Martins <joao.m.martins@oracle.com>
Cc: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
This commit is contained in:
Muchun Song 2026-10-16 21:13:34 +08:00 committed by Andrew Morton
parent d2f7bdfdea
commit c82dba3183

View File

@ -1142,6 +1142,8 @@ void __ref memmap_init_zone_device(struct zone *zone,
if (!nr_pages)
return;
VM_WARN_ON(!IS_ALIGNED(start_pfn | nr_pages, pfns_per_compound));
/*
* Seed the reusable head-page template from the first real struct
* page. The normal page-init and refcount helpers must operate on