> On Oct 17, 2026, at 10:21, Andrew Morton <[email protected]> wrote:
> 
> On Fri, 16 Oct 2026 21:13:34 +0800 Muchun Song <[email protected]> 
> wrote:
> 
>> 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.
>> 
>> ...
>> 
>> --- a/mm/mm_init.c
>> +++ b/mm/mm_init.c
>> @@ -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));
> 
> Would VM_WARN_ON_ONCE() suffice?

What I was thinking is that this function won't be called frequently, so it
won't encounter a large volume of log flushing. Therefore, I didn't use the
ONCE interface, and this way it can continue to catch similar issues.

I'm OK if you prefer VM_WARN_ON_ONCE() though. Let me know what you think.

Thanks,
Muchun

> 
>> +
>>      /*
>>       * Seed the reusable head-page template from the first real struct
>>       * page. The normal page-init and refcount helpers must operate on
>> 
>> base-commit: 63562804f25cb5b6f5e4f5e3a9f0d1c3c6868596
>> -- 
>> 2.54.0



Reply via email to