Re: [RFC PATCH] memory,memory_hotplug: allow restricting memory blocks to zone movable

From: David Hildenbrand (Red Hat)

Date: Wed Jan 07 2026 - 10:09:42 EST


On 1/6/26 20:49, Michal Hocko wrote:
On Tue 06-01-26 11:53:30, Gregory Price wrote:
On Tue, Jan 06, 2026 at 04:05:48PM +0100, Michal Hocko wrote:
On Mon 05-01-26 15:36:11, Gregory Price wrote:
It was reported (LPC 2025) that userland services which monitor memory
blocks can cause hot-unplug to fail permanently.

This can occur when drivers attempt to hot-remove memory in two phases
(offline, remove), while a userland service detects the memory offline
and re-onlines the memory into a zone which may prevent removal.

Are there more details about this?

The details are with Hannes, I was just recapping what was described in
his devmem talk at LPC ("To online or not online").

I know of policies to online newly added memory blocks but I am not
aware of policies to re-online something that has been made offline.
That being said, rather than movable_only, should we have a mask of
online types supported for the mem block?


I briefly considered this. I went with this for RFC-v1 since it's
fairly simple and because movable is really the only zone with hotplug
guarantees (any other zone makes no hotplug guarantees).

It's also significantly more complex of a change for questionable value,
but if people see this as the way to go i'll happily pivot to that.

Sure, I wouldn't push for more complexity just for the sake of a
theoretical extensibility. And I have to admit I have't tried to a quick
PoC to see how complex this could grow. I was hoping this could get into
a simple mask for online types with default MMOP_ONLINE_KERNEL|MMOP_ONLINE_MOVABLE
and special cases just choosing one of the two and zone_for_pfn_range
checking for the compatibility with the requested online type. But I do
appreciate there might be some obstacles on the way to achieve that.

If we want to go down that path of failing onlining, we could likely do without any core-MM changes: dax can simply register a memory notifier and fail MEM_GOING_ONLINE of its memory with -EINVAL when it sees !ZONE_MOVABLE.

That works, because online_pages() does the move_pfn_range_to_zone() before calling MEM_GOING_ONLINE.

--
Cheers

David