Re: [PATCH 4/6] mm/page_alloc: don't undo another isolation in alloc_contig_range
From: David Hildenbrand (Arm)
Date: Tue Oct 27 2026 - 09:48:06 EST
On 10/27/26 05:22, Gregory Price (Meta) wrote:
> An alloc_contig_range() that overlaps a block going offline can leave
> the offline spinning until it gets a signal, holding the device hotplug
> lock. When isolation fails, alloc_contig_frozen_range() undoes it over
> the whole range, clearing the offline's MIGRATE_ISOLATE too:
>
> CPU 1 (offline_pages) CPU 2 (alloc_contig_range)
> start_isolate_page_range()
> blocks are MIGRATE_ISOLATE
> start_isolate_page_range()
> -EBUSY on CPU 1's blocks
> undo_isolate_page_range()
> blocks are MIGRATE_MOVABLE
> test_pages_isolated()
> never succeeds again
>
> start_isolate_page_range() fails only on a block someone else isolated,
> after undoing its own, so this undo only ever clears another caller's.
> Return directly, as before alloc_contig_range() went pageblock granular.
>
> With offline_pages() parked after isolating a DIMM block and a 1G
> hugetlb allocation made over it, the offline on base still loops 30s
> later in 4 of 4 runs:
>
> offline_pages+0x5b2/0x1570
> memory_subsys_offline+0x17e/0x470
> device_offline+0x250/0x340
> state_store+0x88/0x110
>
> With this patch the allocation still fails, and the offline completes in
> 3 of 3 runs.
>
> Fixes: b2c9e2fbba32 ("mm: make alloc_contig_range work at pageblock granularity")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Gregory Price (Meta) <gourry@xxxxxxxxxx>
> ---
We have an existing AI fix for that as well already handled by Vlasta.
I think we'll have to establish some model of "ask David first before posting"
because otherwise we just create duplicate work for everyone.
--
Cheers,
David