From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F255A3D5228 for ; Mon, 11 May 2026 09:04:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490271; cv=none; b=RGwVovEb6traoU6//WpU8AwbkI8nOEx2NjGKYFgHl9sWLOk9e9MBnC/ywJX8eSz89/90JwIJqDfww/WzTlQ0oJcUFaEPT6rxvJtns5kkzBelrkpTCn8j/r0GDPN/dUNuFg4CY1CGacaStVHlvtr87A4I9UlEL6M11hH3oaNF+vY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490271; c=relaxed/simple; bh=FzG8+92oH2mwvb1TgGky3Bd7ojioTSewgWR4luIpYTY=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Xg+SjBZbDFs7SSijSRx9P8c9PbuCeyL0FAFcTB0NzeeKIR6VyAhQUz6AFHZdBBVDHGSgBucnc0Rs4YivSu/v4F2taypR93WsNEfPtBfbDnLaq5A6M8JbUmARTPyNqN/aZXOO72G8oMO7+QcTX33LtAi+HU3Lt8M71+xVVj329A0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=HMUvj9Hv; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Y1yd0xDR; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HMUvj9Hv"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Y1yd0xDR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778490269; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gBKqj2O9gjX/tz0GTabH1SzaDOD5jZb/zvIFduhmeuI=; b=HMUvj9Hv8umZRJ1eBTeyhrw+zJv6QQz8hnOP5o5eDUKL5Jm+QKnFX8yL4lmD8FF4pJqepv ucgb5sMy7CYa81o4xsxtucqFDl0LvZmf0YH/1W0l7q9vLzbGk9d6CDGSehrGRSgv0HNy0c /a87K+baXTLoSSB57hASVKd7UXRrOuk= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-473-jMwJgwBROSGkuR50L5ekgw-1; Mon, 11 May 2026 05:04:27 -0400 X-MC-Unique: jMwJgwBROSGkuR50L5ekgw-1 X-Mimecast-MFC-AGG-ID: jMwJgwBROSGkuR50L5ekgw_1778490266 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-48906aa28cbso37470815e9.0 for ; Mon, 11 May 2026 02:04:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1778490266; x=1779095066; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=gBKqj2O9gjX/tz0GTabH1SzaDOD5jZb/zvIFduhmeuI=; b=Y1yd0xDRtR1HlMSAhVzDkVfr9OYQpDekkgSBe33ytzLPJtIkH0AbbWKChV/Uw96PlS viyO8P/kTOTCg3cE8XOWFQnnTOOxV2w4qCgd4YTI2yzOLpVDwK5GEoja1klcukIvjiIo 7ZoSQCzY8LAdxTc+rf3uXmg6kGQARZfDwQkx7GmiiilpYvJZJ1bcxy95LV7oZgSOXM9u ajDWj7Bn+xXshE97yAOYQat2vBwoPS1w3kby3+BkIyymXG5O/3Vyb5IVfrNGkkGaa3Is T8iWjWXdW4TpHag3QVTT1+iph5wySsQTiuhOG1XJQjsdLvRzgC8vy1OD92nQDxugg1xi kpNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778490266; x=1779095066; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gBKqj2O9gjX/tz0GTabH1SzaDOD5jZb/zvIFduhmeuI=; b=dklBVjwBEIOB7TpSxxYo21Jaxu54VqNW+oWollPljQxuhvFtfc7DV0+KBX3XiIMPYi EWIlwNZyrX5hp4eljrBOhQWT+5Ex7iAGXOUFeMuvql2LWG/AWz3kr5DIVYgRKfKQnBvl wV6Xy7KSN+L9qmrsqLjOipR9tQ9PdGP0TwVz0N/7FSWGzbkxMhXSujdmwXps3bcsDs7U VFdkgMCR/wMU7WKQGETgQXVcHS3h5fnC2i2mEgJWWBLopMgiJmzvIup40szSGakDWRPc OKJR7RGmrULCFZswu19ZnbglMu6T5ezJvnBfNZiUDdTbe4bM8+VNt3j3E3Wa3bTYE0rW uaTw== X-Gm-Message-State: AOJu0YyHT8akbIp2SlZdfTWnmvDTAv3bn6ZOxpg+ktfTNiRg9H0RGGRH jQaA9p63ZSZsc3UzcT5XNHaUkGxxgw9g2zPMnV5+eU0B8nAWGJlrExAvI0cqZ6DWcsJzr/+3oF+ EucqfaLwa6Oamn1PfXXiYBJbkuCrrvmz1dGh2PsPWCi9T4ovN5E45vGQL+xydISbqBJPE8ItZW+ Yk4fZox+4Oz6Z4lAYDC7JpOLItcnGIxhr+a+38s+vD9hU= X-Gm-Gg: Acq92OHSTuq0hH3qru03KqtWfDYzrl14tWeny+zaOUbHdhcTRmq1TWrVm+9jjWCi1MU 0O4wkBR57mv0TNfNIbuiKkRBSSBvQXFO4mYog52AoJPkViw7hoRhwZbqvpq7jvj4OFKEjUGgTxg +INjrB3fHUJxuAT3kztjJAq7UoJFiB7DAx1vU7HtpOsldUy1zwK7+a/32TwfGzaTwqspYeQqPAn 8GMfJqCWed5LUZtK4UUv+PFlQxLGFSIjAJv+uYHnAByoNbyT69/ri89VSDdxHzrJQOBEFZW68p5 9/Mbmq5sZTECHqie969e8xUKRK2D8jIA/LOgHz9xbYy8uaElAmjEGWZ6LDDMFkjxiINxikWjs99 14z01xuQHWmHUnDKIdsRoBMDPQ2XxM1nTxLpLOnIt X-Received: by 2002:a05:600c:3b8f:b0:48a:79d8:a8d6 with SMTP id 5b1f17b1804b1-48e642deefamr226935565e9.7.1778490265703; Mon, 11 May 2026 02:04:25 -0700 (PDT) X-Received: by 2002:a05:600c:3b8f:b0:48a:79d8:a8d6 with SMTP id 5b1f17b1804b1-48e642deefamr226934275e9.7.1778490264756; Mon, 11 May 2026 02:04:24 -0700 (PDT) Received: from redhat.com (IGLD-80-230-48-7.inter.net.il. [80.230.48.7]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e80ca2666sm91672175e9.10.2026.05.11.02.04.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:04:24 -0700 (PDT) Date: Mon, 11 May 2026 05:04:19 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: "David Hildenbrand (Arm)" , Jason Wang , Xuan Zhuo , Eugenio =?utf-8?B?UMOpcmV6?= , Muchun Song , Oscar Salvador , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Christoph Lameter , David Rientjes , Roman Gushchin , Harry Yoo , Axel Rasmussen , Yuanchu Xie , Wei Xu , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , virtualization@lists.linux.dev, linux-mm@kvack.org, Andrea Arcangeli , "Liam R. Howlett" , Youngjun Park , Qi Zheng , Shakeel Butt Subject: [PATCH resend v6 28/30] mm: add put_page_zeroed and folio_put_zeroed Message-ID: <450465e4a03e63381a4bb8a1799a25859d7fdd83.1778489843.git.mst@redhat.com> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Add put_page_zeroed() / folio_put_zeroed() for callers that hold a reference to a page known to be zeroed. If this drops the last reference, the page goes through __folio_put_zeroed() which calls free_frozen_pages_zeroed() so the zeroed hint is preserved. If someone else still holds a reference, the hint is simply lost - this is best-effort. This is useful for balloon drivers during deflation: the host has already zeroed the pages, and the balloon is typically the sole owner. But if the page happens to be shared, silently dropping the hint is safe and avoids the need for callers to check the refcount. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 --- include/linux/mm.h | 12 ++++++++++++ mm/swap.c | 18 ++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 3b1ca90fd435..4c51b7bd7576 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1913,6 +1913,7 @@ static inline struct folio *virt_to_folio(const void *x) } void __folio_put(struct folio *folio); +void __folio_put_zeroed(struct folio *folio); void split_page(struct page *page, unsigned int order); void folio_copy(struct folio *dst, struct folio *src); @@ -2090,6 +2091,17 @@ static inline void folio_put(struct folio *folio) __folio_put(folio); } +static inline void folio_put_zeroed(struct folio *folio) +{ + if (folio_put_testzero(folio)) + __folio_put_zeroed(folio); +} + +static inline void put_page_zeroed(struct page *page) +{ + folio_put_zeroed(page_folio(page)); +} + /** * folio_put_refs - Reduce the reference count on a folio. * @folio: The folio. diff --git a/mm/swap.c b/mm/swap.c index 5cc44f0de987..8d57223dfe34 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -94,7 +94,7 @@ static void page_cache_release(struct folio *folio) lruvec_unlock_irqrestore(lruvec, flags); } -void __folio_put(struct folio *folio) +static void ___folio_put(struct folio *folio, bool zeroed) { if (unlikely(folio_is_zone_device(folio))) { free_zone_device_folio(folio); @@ -109,10 +109,24 @@ void __folio_put(struct folio *folio) page_cache_release(folio); folio_unqueue_deferred_split(folio); mem_cgroup_uncharge(folio); - free_frozen_pages(&folio->page, folio_order(folio)); + if (zeroed) + free_frozen_pages_zeroed(&folio->page, folio_order(folio)); + else + free_frozen_pages(&folio->page, folio_order(folio)); +} + +void __folio_put(struct folio *folio) +{ + ___folio_put(folio, false); } EXPORT_SYMBOL(__folio_put); +void __folio_put_zeroed(struct folio *folio) +{ + ___folio_put(folio, true); +} +EXPORT_SYMBOL(__folio_put_zeroed); + typedef void (*move_fn_t)(struct lruvec *lruvec, struct folio *folio); static void lru_add(struct lruvec *lruvec, struct folio *folio) -- MST