Re: [PATCH v10 36/37] mm: balloon: use put_page_zeroed for zeroed balloon pages

From: David Hildenbrand (Arm)

Date: Mon Jun 08 2026 - 07:11:34 EST


On 6/8/26 10:40, Michael S. Tsirkin wrote:
> When a balloon page marked PageZeroed is freed during migration,
> use put_page_zeroed() to propagate the zeroed hint to the buddy
> allocator. Previously the hint was silently lost via plain put_page().
>
> No page has PageZeroed set yet; the next patch
> (VIRTIO_BALLOON_F_DEVICE_INIT_ON_INFLATE) will set it on
> pages the host has zeroed during inflate.
> Note: during balloon migration, the migration core holds an
> extra reference, so put_page_zeroed() will not be the final
> put. The zeroed hint is lost in that case, which is
> acceptable: it is a best-effort optimization.
>
> Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> Assisted-by: Claude:claude-opus-4-6
> ---
> mm/balloon.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/mm/balloon.c b/mm/balloon.c
> index 96a8f1e20bc6..6c9dd8ab0c5d 100644
> --- a/mm/balloon.c
> +++ b/mm/balloon.c
> @@ -324,7 +324,15 @@ static int balloon_page_migrate(struct page *newpage, struct page *page,
> balloon_page_finalize(page);
> spin_unlock_irqrestore(&balloon_pages_lock, flags);
>
> - put_page(page);
> + if (PageZeroed(page)) {
> + /* Atomic to serialize with memory_failure's
> + * TestSetPageHWPoison; not under zone->lock here.
> + */
> + ClearPageZeroed(page);
> + put_page_zeroed(page);
> + } else {
> + put_page(page);
> + }
>
> return 0;
> }

I think I raised previously that this is best done later.

This patch set is currently trying to do too many things, and is on the larger
side. I think we should try to reduce it to the bare minimum and get some
agreement between maintainers on the core design.

--
Cheers,

David