From nobody Thu Jun 18 07:54:19 2026 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 1B3B22BD11 for ; Mon, 20 Apr 2026 12:50:27 +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=1776689429; cv=none; b=SmP4epB+tL31TGWCqH6VFvp5T15PIVTubH1cFbYF6Uy7XyFkFWaJ3h0DEjvz3mTz1B8jnZ/U28R1y1FVa7GaCXLq8Vb+1NlNLUAcuswtqW1bhxO57oYSasntpILVnIKp9r1JfDI9tN991yVDvbm5pyt0RIX3Domjjk9zb/OgxjE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689429; c=relaxed/simple; bh=ElXB4QKq3kqLoKEjiaPaOZnklCWfqoTQmJffudY8v4I=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=gVorVrvBdx7kxs6ftWDfmj8wmTdSOvxBx3tTzyAO9IdZGFk4mlOqMPbva+fjeW9oQlPymjQkzrcGHOW09N2vY7BH3+LXmQF/StSYNh54K9+4HvqHEHIBUPZmS5wF/vM+QMRNhZzji7FemE6EKRlJtM9vpV/proKXJt1ZkdlxbH4= 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=frQaB9iC; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=ZjBJnpGW; 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="frQaB9iC"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZjBJnpGW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689427; 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=IelIqVYy/AcgVP/OqP2S72GFWZ6ux/wlNrxvOYGdRd0=; b=frQaB9iCMvw8cI2delL6QcPCfh9pNXbsWoxVWxbv468YG1nDIsOU1Irl99rsYH9WFZlZvp +o7ze2fH9zwloo4puQqC8ABxFJLwxrgsxO73mL3qcebPZCYurZGvo65RGGCydEo7MnZeHh M90+LsgYpDCCvtEe6tEuBJ8KEyiZ4jY= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-27-fGIZEB84OuS3d2IBrVI82A-1; Mon, 20 Apr 2026 08:50:26 -0400 X-MC-Unique: fGIZEB84OuS3d2IBrVI82A-1 X-Mimecast-MFC-AGG-ID: fGIZEB84OuS3d2IBrVI82A_1776689425 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-4411a69f565so698028f8f.2 for ; Mon, 20 Apr 2026 05:50:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689424; x=1777294224; 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=IelIqVYy/AcgVP/OqP2S72GFWZ6ux/wlNrxvOYGdRd0=; b=ZjBJnpGW+P4GoNJLvnCdMqSMc0P/WsT37OR9dsdCvrIoNzoMsszAEdvoOi63Yt6w20 bPjH87bE3z86UR9ppy5UjAD+xoLdpVKfKJyAmj5DGXfOQFyyyq9CH1rEyWqrbLiKtscY Tlq+iV67eDwbBc4/b5qaAX6dOACFZdh3JhfAxutj4aq1T58I9w2D0fhoNvFfj5G1Mh+U khGHQj+eoSSrB1z88BJOTgMqzE57QGd69s3PW+V0dAaQ9LFuB/DQl3RHrs0GVXRqPUHr Kp/jlQpSHUmKrwBCKSVguqSnJ2qAdKZ0Y8X7+E87FBl8AplwVudxPlCEhbtzyR2VZkS4 vf5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689424; x=1777294224; 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=IelIqVYy/AcgVP/OqP2S72GFWZ6ux/wlNrxvOYGdRd0=; b=bVDP44cvKCNhNdlsqeiEjfSbssuniQOY5Ux9W2slytK2oXUIWoUW2I0TF7tx1XCMh3 bY/FnWGQ5vtg4AQduSRaUrT4ybD4pf7ygqO4FsZ4EDBdu8A7Zv6/ppZ8iLry0qIGCyNn HfT21aX9CCeFK6y0jpyUHTWzeMYt9QluaHZ+cw+q5f2ArNL89/dwvnRgfzV+UxlYVWhW WGbJXVOSzoPP+B5/9JywKLcSTZ5/GrmM91LnzYH3Hd9TnaPqKFVKpvD3OLksp7/NfcIa E/y6yDZ59k0RnarWA+HolXSgt795iTeu0i2S7VVdBPxuYpyc8OcnRSA8UKwk6QdXlnAf zHog== X-Gm-Message-State: AOJu0Yx1ASSgX7+RjSiuKL3NttyQwJjDkbi4+yGGN06VadC5KU6/Bbze sgSKAz29napgI4gsUT/nsXKCLcstBVUSI2JCPlCYSybRSv/8b/4qmhjpQGEmxMegqGP0oXavthn 5smh8d/5THb797mH2Mu8MQBw47dXt1w/npsOJpU5AMw8tbzN3GqZsSH5kulGAk2U/nr6O+MIxGb vTJ6B2ITLpKYwEgJx7yS5/zLRXmg8t8WjelcsqO1SdtE4= X-Gm-Gg: AeBDieszwV1MR20UgbEUp8f5yevqcathbbgLX38bk88Otu9HMqp/K2YF+L/8ZNATc6k kUY1L/MU7USGInml5d+Ywcmabjbq7MV3w7ZhB37Cz/28PHULXUaVs8vo2TNuKPqjuIgYQ5eZF2V hHaaGASu8ApuiUj/p/Hv4v4dGDjddK7N6nIIB8g27lmbAnWgGKFCCtz5CbACezWxc6rSlmB7XFF kSt0hZFqx+c3HUNFnL7XfGDKR+JTjFYZfqdN/mbUIpMF0OU70MgDZrpdrFA7Q7+SJOMIMvF1CsW uyyh8WyVLa25Uj9TafAkWJQzwGE9hvwvMdFHfsdBFFZEw5qbLa95pX5Z7vFJkuXMJHkjesv2fZG 7xyuq6QAg21tmw/z/RUN0u7Ec1uSm5NRbRw+xHits2t0VaGA99FeuZg== X-Received: by 2002:a5d:5f89:0:b0:441:1c95:17e7 with SMTP id ffacd0b85a97d-4411c951810mr250614f8f.15.1776689424238; Mon, 20 Apr 2026 05:50:24 -0700 (PDT) X-Received: by 2002:a5d:5f89:0:b0:441:1c95:17e7 with SMTP id ffacd0b85a97d-4411c951810mr250513f8f.15.1776689423506; Mon, 20 Apr 2026 05:50:23 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e3a397sm31385276f8f.23.2026.04.20.05.50.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:22 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:20 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan Subject: [PATCH RFC v2 01/18] mm: page_alloc: propagate PageReported flag across buddy splits Message-ID: <8fb5a2dd7eee6fb8ead6b2cb84dc5cc0c45a0f32.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When a reported free page is split via expand() to satisfy a smaller allocation, the sub-pages placed back on the free lists lose the PageReported flag. This means they will be unnecessarily re-reported to the hypervisor in the next reporting cycle, wasting work. Propagate the PageReported flag to sub-pages during expand() so that they are recognized as already-reported. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/page_alloc.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2d4b6f1a554e..edbb1edf463d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1730,7 +1730,7 @@ struct page *__pageblock_pfn_to_page(unsigned long st= art_pfn, * -- nyc */ static inline unsigned int expand(struct zone *zone, struct page *page, in= t low, - int high, int migratetype) + int high, int migratetype, bool reported) { unsigned int size =3D 1 << high; unsigned int nr_added =3D 0; @@ -1752,6 +1752,15 @@ static inline unsigned int expand(struct zone *zone,= struct page *page, int low, __add_to_free_list(&page[size], zone, high, migratetype, false); set_buddy_order(&page[size], high); nr_added +=3D size; + + /* + * The parent page has been reported to the host. The + * sub-pages are part of the same reported block, so mark + * them reported too. This avoids re-reporting pages that + * the host already knows about. + */ + if (reported) + __SetPageReported(&page[size]); } =20 return nr_added; @@ -1762,9 +1771,10 @@ static __always_inline void page_del_and_expand(stru= ct zone *zone, int high, int migratetype) { int nr_pages =3D 1 << high; + bool was_reported =3D page_reported(page); =20 __del_page_from_free_list(page, zone, high, migratetype); - nr_pages -=3D expand(zone, page, low, high, migratetype); + nr_pages -=3D expand(zone, page, low, high, migratetype, was_reported); account_freepages(zone, -nr_pages, migratetype); } =20 @@ -2322,7 +2332,8 @@ try_to_claim_block(struct zone *zone, struct page *pa= ge, =20 del_page_from_free_list(page, zone, current_order, block_type); change_pageblock_range(page, current_order, start_type); - nr_added =3D expand(zone, page, order, current_order, start_type); + nr_added =3D expand(zone, page, order, current_order, start_type, + false); account_freepages(zone, nr_added, start_type); return page; } --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 5660A3016FB for ; Mon, 20 Apr 2026 12:50:31 +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=1776689433; cv=none; b=T/V9vwuAoWKOabmCczZoOnetTp8oyPm8XytNFkl7DjeIPlSDGU7YJRaQ7LqdZ19F2Fk9pmrZl3o91ENm0iJDLuKagfah4n8TUnodSwL8NxqEwJAFyVJayqUcvKDLlN+jb7U/h6ksdLbpwk4O6MVRr8vZjq86Bl2+Vjoodvn9izE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689433; c=relaxed/simple; bh=Pgd5pgQvAE8Ie6vlQf5xyYaFKximuIPOGMU/e9exHFU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=QyueziGjFXd2zQgU/1TONywowr3SKHMRK5yEtaO9yM2uXaIhSWt6fb66MTBdvN9CtzU1smjfd80UqSSCvpv6bnBcq84jhmjiMScBZLlQGeX+UgKdPfKiMgGe7nf4AEIs2qtZ9EnfJU+IPZ+hP2t+6StQQN4UD7cY0yIvAB5O7LI= 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=OPEvVybE; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=r/NaczdA; 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="OPEvVybE"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="r/NaczdA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689430; 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=l5FdBsp1kGQjyJJvapBdTNqnIIO/0keRRtcyQFKcGwU=; b=OPEvVybEcr3VGOAkZjn5A2+w+cxvcePHe+9sNLwprl1qY/NbTdjr+WalWui47+0QMnWqbU xTv0DuuRbvJ9TFO7qS6guZTOsuP72b3pNt6MqpZLhQeFtXVo4fUXkSePQNEGXSE1/irdjB SpPbjnH3cGf/ufm0obEVZUGBBZyAS+g= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-323-X5r1s6ilOTCGXbli7Kde8Q-1; Mon, 20 Apr 2026 08:50:29 -0400 X-MC-Unique: X5r1s6ilOTCGXbli7Kde8Q-1 X-Mimecast-MFC-AGG-ID: X5r1s6ilOTCGXbli7Kde8Q_1776689428 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4891e102d47so5068325e9.0 for ; Mon, 20 Apr 2026 05:50:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689428; x=1777294228; 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=l5FdBsp1kGQjyJJvapBdTNqnIIO/0keRRtcyQFKcGwU=; b=r/NaczdAmgope3gydptqPLtgkVKouILMy6PKy7u4NzabkUYQ9IOzU86RdGR/RJPZNr QBw/Dmt+6PC2CwJQF9uEirnwb93FyN6E34P6onEx8MijMyZKJ7A3eiwM16L6iyLtPTNK Tswfmj9zpblxApE4CCCT3kwNuzws7Wha81TzaRyeBwvS435F37CBr2HVQcUnzlvlCRj+ Mz3yAGrHDYkn6Z6dvsJbXDE7BS3mb6R/zvKuXkk9w3tUyS/5M21nE3rKYa7zj763eIHt NttSbyEnLOLTG0wMVKuq2zhCIbRzkC+4WcMaaDOWsELqP8AfX5ECmwfRgV1bkDT6UdAK QHDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689428; x=1777294228; 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=l5FdBsp1kGQjyJJvapBdTNqnIIO/0keRRtcyQFKcGwU=; b=OmKs1CwbdnEIEAwgNl6P45dh6/jvDX2wmys3v33/r7p+a3g3P2cvy3SUoXN2dGQrTA MeVjAXXEddC816gPXcbM6TTHV8erRAeDmqyMv95nFOsI9uOPdKjVexMbuNrjSyRulnlI jsfNHEi/ajtd9dPmGR/qrEuZs7WLblXCesayD6YNjmm+5x37VbVRcbrDLqrpA13sQ1Z/ Jx2LtCnCrVCtpkcmD3ZrbK//rG0Dbxajc5NJ+vc1Pq0CYPOa5I56RhZTe7tXPCHjKH5I /En6kqKjJZ5dIACZk6oMkx3sEzcLfHNvGg/PIMgV89ziRiyt8brQzujwNBBRl1+dBclh BvGQ== X-Gm-Message-State: AOJu0YxFdvpt1+uhXfee6ZTQcNRh2tZ2eUO6snbiTkbCoQJKh303eLSd zqcpbPcFD92AViW0htsC7RXc9ssNkdkNubgJ2mPF4YcmRYcAqO+indrxbq0wiN2tgw6kkSUItas 6+4/pixaKz0nyBSRE+H5YXTukj5BERinKfECx5tnP/hy9RAFrPimZSoqTrOxNdmVDy59pgR8Uxh 67uLW1RGpbp4TWkW3VoPCn0PNu53NIVRVSp2J32plWDao= X-Gm-Gg: AeBDievW0kqNPCS6fAIpL53CK/qXuD0hj3XogKCuTObvRjQfEnwwT/Pp53tIeq1UFdA 5keNnEfnHtR51JCvWOIm+SkDqa9xmO9+68eEeM7bGn3UiUoeHei3x/u6mFGlG5KVZwt/MzzE8Wg H7SyThI8dAJYNK+DZ6fVwWlcNd12rs7PBm1qR56dslNgD/zceFLEvwPOYTBhqvobVxlbt/9Y1tP Q/f6T/aN8A5VW2FzOct3l54bp2+c/pUZDTyV8aIXazAj05TZK+0d1ruuc9npER4oGyr+LkrvbXS GwTLVCtENeJ6fxmbQ7/MAcQjb5u24T6guajpc89KHNS0HDMq+ZUXg1BPA5mXnR3ZfWtQ5vLVlMQ C3nR6CMs/hWeNKKEnzuH0d+e44ZNY0U9m1l5GX4FadTWN26ZI/eRZig== X-Received: by 2002:a05:600c:c0db:b0:485:2a4b:7bc3 with SMTP id 5b1f17b1804b1-488fb745289mr134427245e9.4.1776689427901; Mon, 20 Apr 2026 05:50:27 -0700 (PDT) X-Received: by 2002:a05:600c:c0db:b0:485:2a4b:7bc3 with SMTP id 5b1f17b1804b1-488fb745289mr134426535e9.4.1776689427197; Mon, 20 Apr 2026 05:50:27 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891f4016bbsm17219265e9.4.2026.04.20.05.50.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:26 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:23 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan , Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple Subject: [PATCH RFC v2 02/18] mm: add pghint_t type and vma_alloc_folio_hints API Message-ID: <290d615a001cf121dc0c604eb79451bcc7917baa.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add pghint_t, a bitwise type for communicating page allocation hints between the allocator and callers. Define PGHINT_ZEROED to indicate that the allocated page contents are known to be zero. Add _hints variants of the allocation functions that accept a pghint_t *hints output parameter: vma_alloc_folio_hints() -> folio_alloc_mpol_hints (internal) -> __alloc_frozen_pages_hints() The existing APIs are unchanged and continue to work without hints. For now, hints is always initialized to 0. A subsequent patch will set PGHINT_ZEROED when the page was pre-zeroed by the host. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- include/linux/gfp.h | 15 ++++++++ mm/internal.h | 4 +++ mm/mempolicy.c | 85 +++++++++++++++++++++++++++++++++++++++++++++ mm/page_alloc.c | 15 ++++++-- 4 files changed, 117 insertions(+), 2 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 51ef13ed756e..14433a20e60c 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -226,6 +226,9 @@ static inline void arch_free_page(struct page *page, in= t order) { } static inline void arch_alloc_page(struct page *page, int order) { } #endif =20 +typedef unsigned int __bitwise pghint_t; +#define PGHINT_ZEROED ((__force pghint_t)BIT(0)) + struct page *__alloc_pages_noprof(gfp_t gfp, unsigned int order, int prefe= rred_nid, nodemask_t *nodemask); #define __alloc_pages(...) alloc_hooks(__alloc_pages_noprof(__VA_ARGS__)) @@ -325,6 +328,9 @@ struct folio *folio_alloc_mpol_noprof(gfp_t gfp, unsign= ed int order, struct mempolicy *mpol, pgoff_t ilx, int nid); struct folio *vma_alloc_folio_noprof(gfp_t gfp, int order, struct vm_area_= struct *vma, unsigned long addr); +struct folio *vma_alloc_folio_hints_noprof(gfp_t gfp, int order, + struct vm_area_struct *vma, unsigned long addr, + pghint_t *hints); #else static inline struct page *alloc_pages_noprof(gfp_t gfp_mask, unsigned int= order) { @@ -344,12 +350,21 @@ static inline struct folio *vma_alloc_folio_noprof(gf= p_t gfp, int order, { return folio_alloc_noprof(gfp, order); } +static inline struct folio *vma_alloc_folio_hints_noprof(gfp_t gfp, int or= der, + struct vm_area_struct *vma, unsigned long addr, + pghint_t *hints) +{ + if (hints) + *hints =3D 0; + return folio_alloc_noprof(gfp, order); +} #endif =20 #define alloc_pages(...) alloc_hooks(alloc_pages_noprof(__VA_ARGS__)) #define folio_alloc(...) alloc_hooks(folio_alloc_noprof(__VA_ARGS__)) #define folio_alloc_mpol(...) alloc_hooks(folio_alloc_mpol_noprof(__VA_A= RGS__)) #define vma_alloc_folio(...) alloc_hooks(vma_alloc_folio_noprof(__VA_ARG= S__)) +#define vma_alloc_folio_hints(...) alloc_hooks(vma_alloc_folio_hints_nopr= of(__VA_ARGS__)) =20 #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0) =20 diff --git a/mm/internal.h b/mm/internal.h index cb0af847d7d9..686667b956c0 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -894,8 +894,12 @@ extern int user_min_free_kbytes; =20 struct page *__alloc_frozen_pages_noprof(gfp_t, unsigned int order, int ni= d, nodemask_t *); +struct page *__alloc_frozen_pages_hints_noprof(gfp_t, unsigned int order, + int nid, nodemask_t *, pghint_t *hints); #define __alloc_frozen_pages(...) \ alloc_hooks(__alloc_frozen_pages_noprof(__VA_ARGS__)) +#define __alloc_frozen_pages_hints(...) \ + alloc_hooks(__alloc_frozen_pages_hints_noprof(__VA_ARGS__)) void free_frozen_pages(struct page *page, unsigned int order); void free_unref_folios(struct folio_batch *fbatch); =20 diff --git a/mm/mempolicy.c b/mm/mempolicy.c index cf92bd6a8226..b918639eef71 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2547,6 +2547,91 @@ struct folio *vma_alloc_folio_noprof(gfp_t gfp, int = order, struct vm_area_struct } EXPORT_SYMBOL(vma_alloc_folio_noprof); =20 +static struct page *alloc_pages_preferred_many_hints(gfp_t gfp, + unsigned int order, int nid, nodemask_t *nodemask, + pghint_t *hints) +{ + struct page *page; + gfp_t preferred_gfp; + + preferred_gfp =3D gfp | __GFP_NOWARN; + preferred_gfp &=3D ~(__GFP_DIRECT_RECLAIM | __GFP_NOFAIL); + page =3D __alloc_frozen_pages_hints_noprof(preferred_gfp, order, nid, + nodemask, hints); + if (!page) + page =3D __alloc_frozen_pages_hints_noprof(gfp, order, nid, NULL, + hints); + + return page; +} + +static struct page *alloc_pages_mpol_hints(gfp_t gfp, unsigned int order, + struct mempolicy *pol, pgoff_t ilx, int nid, + pghint_t *hints) +{ + nodemask_t *nodemask; + struct page *page; + + nodemask =3D policy_nodemask(gfp, pol, ilx, &nid); + + if (pol->mode =3D=3D MPOL_PREFERRED_MANY) + return alloc_pages_preferred_many_hints(gfp, order, nid, + nodemask, hints); + + if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && + order =3D=3D HPAGE_PMD_ORDER && ilx !=3D NO_INTERLEAVE_INDEX) { + if (pol->mode !=3D MPOL_INTERLEAVE && + pol->mode !=3D MPOL_WEIGHTED_INTERLEAVE && + (!nodemask || node_isset(nid, *nodemask))) { + page =3D __alloc_frozen_pages_hints_noprof( + gfp | __GFP_THISNODE | __GFP_NORETRY, order, + nid, NULL, hints); + if (page || !(gfp & __GFP_DIRECT_RECLAIM)) + return page; + } + } + + page =3D __alloc_frozen_pages_hints_noprof(gfp, order, nid, nodemask, + hints); + + if (unlikely(pol->mode =3D=3D MPOL_INTERLEAVE || + pol->mode =3D=3D MPOL_WEIGHTED_INTERLEAVE) && page) { + if (static_branch_likely(&vm_numa_stat_key) && + page_to_nid(page) =3D=3D nid) { + preempt_disable(); + __count_numa_event(page_zone(page), NUMA_INTERLEAVE_HIT); + preempt_enable(); + } + } + + return page; +} + +struct folio *vma_alloc_folio_hints_noprof(gfp_t gfp, int order, + struct vm_area_struct *vma, unsigned long addr, + pghint_t *hints) +{ + struct mempolicy *pol; + pgoff_t ilx; + struct folio *folio; + struct page *page; + + if (vma->vm_flags & VM_DROPPABLE) + gfp |=3D __GFP_NOWARN; + + pol =3D get_vma_policy(vma, addr, order, &ilx); + page =3D alloc_pages_mpol_hints(gfp | __GFP_COMP, order, pol, ilx, + numa_node_id(), hints); + mpol_cond_put(pol); + if (!page) + return NULL; + + set_page_refcounted(page); + folio =3D page_rmappable_folio(page); + return folio; +} +EXPORT_SYMBOL(vma_alloc_folio_hints_noprof); + struct page *alloc_frozen_pages_noprof(gfp_t gfp, unsigned order) { struct mempolicy *pol =3D &default_policy; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index edbb1edf463d..f7abbc46e725 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5222,14 +5222,17 @@ EXPORT_SYMBOL_GPL(alloc_pages_bulk_noprof); /* * This is the 'heart' of the zoned buddy allocator. */ -struct page *__alloc_frozen_pages_noprof(gfp_t gfp, unsigned int order, - int preferred_nid, nodemask_t *nodemask) +struct page *__alloc_frozen_pages_hints_noprof(gfp_t gfp, unsigned int ord= er, + int preferred_nid, nodemask_t *nodemask, pghint_t *hints) { struct page *page; unsigned int alloc_flags =3D ALLOC_WMARK_LOW; gfp_t alloc_gfp; /* The gfp_t that was actually used for allocation */ struct alloc_context ac =3D { }; =20 + if (hints) + *hints =3D (pghint_t)0; + /* * There are several places where we assume that the order value is sane * so bail out early if the request is out of bound. @@ -5285,6 +5288,14 @@ struct page *__alloc_frozen_pages_noprof(gfp_t gfp, = unsigned int order, =20 return page; } +EXPORT_SYMBOL(__alloc_frozen_pages_hints_noprof); + +struct page *__alloc_frozen_pages_noprof(gfp_t gfp, unsigned int order, + int preferred_nid, nodemask_t *nodemask) +{ + return __alloc_frozen_pages_hints_noprof(gfp, order, preferred_nid, + nodemask, NULL); +} EXPORT_SYMBOL(__alloc_frozen_pages_noprof); =20 struct page *__alloc_pages_noprof(gfp_t gfp, unsigned int order, --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 A05BD34B183 for ; Mon, 20 Apr 2026 12:50:35 +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=1776689436; cv=none; b=k2Bs+GnDHykMuVcMBmy0jHZxdOs53KvGvZ93jdqYX6Iv5F0hIOv8w0SWKvJ3/p7ptBK+K1rCQIEimUoeQ8hF4cBWrurP4hAhb+NiPwO0o9GB11xpXvoQWhLJctJg9XfJqaNzVlE9avE+bBjKtK1IxkjLiRuoLBHpS5Bpp5U702o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689436; c=relaxed/simple; bh=pSp+om6wJRkEyaJKuodIN3r3I4NOe1erDIwSwnd9xvk=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ts31aFQzTmzfte1lfhC2vYa5lghGkuMTmKGwi6ikspwROsd9vlgbwKf0YRFs4lPV5XDdA8VBVsbyHp9Zoc9RUK3tt+k3Ny+sckTqBrlOuaaMomth6tsnn2AMkUyw/N/VOsebXVcVjC8OgBJAXZt0yJCc3bHnmLJ8CPboH6tO1bk= 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=hdV3rFHl; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=DBkyMga0; 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="hdV3rFHl"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="DBkyMga0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689434; 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=lC9qQY7bzQ6V7tm8vX9AgtgL5Xqe3kB5rW8A2PJPlKk=; b=hdV3rFHlU2B2zEikdWPqlW1xq29Njr/wa1F6HSTeK6FKrRU1iCHBZZ4d7jF1mqbEUH12Vu l/iIuVIG7BvJ0e+9A9rV7/VyUPTEfoFGCxQrHw95xoWtc9x0ATXPoz2DNG4VE6Q95ZLGM8 Kk1zmwkO+/KfClluCcmGX2ChT30/yjA= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-5-5cqa8ociMTaJGa-JMJgTkg-1; Mon, 20 Apr 2026 08:50:32 -0400 X-MC-Unique: 5cqa8ociMTaJGa-JMJgTkg-1 X-Mimecast-MFC-AGG-ID: 5cqa8ociMTaJGa-JMJgTkg_1776689431 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-4411a572dc5so650989f8f.1 for ; Mon, 20 Apr 2026 05:50:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689431; x=1777294231; 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=lC9qQY7bzQ6V7tm8vX9AgtgL5Xqe3kB5rW8A2PJPlKk=; b=DBkyMga0dDt6hsVm2CglP2+0EiQn06luw316mXblKUW4Ci8I7NcMJJPsfd2Iz9K9Oz RbY7/fnbd+U1NtTAHg8dZjylbz5H+2hGzp6GDlseeeC5D7S9NZuFfafuqa87t17ms1HW F3gKs/hSAhxkWq0bgfYERifmZHMP6S7VrXnjAx7Sm4y4mSuTCZIjOqgz2t1wp3SMLjCw d3mpE1j2oShRWyMY9c4J1jQmwKqvxfC8kyDwwwYmn5VdzTjlQRLdNtSfkNksPw2wsI7S zjRGXqg7KxWFIX5Z0GCpHpPwlk7EEt/jQeU+Pl4bJ/oCxXkQMpZKYpxxN2N2HZLkhvnM 5m0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689431; x=1777294231; 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=lC9qQY7bzQ6V7tm8vX9AgtgL5Xqe3kB5rW8A2PJPlKk=; b=YnShcZevptc8kkBEaj09XklhodMxQaN5lLaH5nWODByb2UCsrPz4BIiFTTTGq3rXSw 2OihE8Nt1iK6tLKI7rlAv719jw0CiR1YD9CIQt7PnUbohRmwLC83RSt92gORi854bavn WZgKvqeTmwky86jOmXFcjNa0vP/t8eb7mqCRAkdfsM42L02pYma6CW4IPWgst5xOc7pZ 9X5wqttAU6ne8HcAUGOUbpKZC3VrSAM0Z151kY9nOs2QU137tYuNz0VzGA8lYbDaYFw+ qvcECFcnoglUU4Vs5WsWueU8p3QOcqaL3gjaTkiKUdwLLsr1C+HqQV5Xj5BqMAgjn0qU JK9A== X-Gm-Message-State: AOJu0YwFmqj6UlvjZ4AfYk1tf/vI/8NlhzSS19AoIdnQx5rNBTaATvpw ZF5Nw4dDISAuVfCzWj4lPVDDsNoAg8s4MFHIR/M0amfC2vv7saKaaMZ3sUEYuH2QQxXePDVN6Qf 5agIGWK58aE887eKrypNPNbim+J+5b4pTJwu2RT3NudtJGyEZ/RpNEv1b7HOHnHffavf5tJnXe6 tsZK72n6u+EG4IyiYvEpoip2pqR8w876PRgT8YV0yQE7k= X-Gm-Gg: AeBDieviP/h1Wk25Nzqo5sB4tBJvSGJYupYX+9JDURWhug/1W9n50NE8EMgCJg/iHXy ounNIBawV6MJPj0XbtS6TqYSFczSvltOcT+xJGW6JL8IXDKX/ceph5DPCrLhbH78BqvV2Fg0lPO gzYleGozHNKs9xgxGIBN0s3kLal8MiEsCvjRPGNpPmuQtmcyLPNDHE1eEqDhK1tqX6I/fmSJ2/m uuITBVQmpBrDyTxcfYqJQCNDznu+7WnoX6CMs40FRCnKvxp2hZ5gXsFOrMP3sxdtK/V57ltGxnR eI+P7dCtxDcgv01P+xrdgEP+aQRY8Qf8Ts5+51mwpKf033LgcA9tgjbwtG1hqR7njojZXYO+CPa 17HoyFGt+MM59IYUBmFVxQ9klQC/m2b8luF/tbhklCGiGRQJhB2+80Q== X-Received: by 2002:a05:6000:2c0b:b0:439:beb9:5a96 with SMTP id ffacd0b85a97d-43fe3dfbff5mr21175552f8f.31.1776689430990; Mon, 20 Apr 2026 05:50:30 -0700 (PDT) X-Received: by 2002:a05:6000:2c0b:b0:439:beb9:5a96 with SMTP id ffacd0b85a97d-43fe3dfbff5mr21175410f8f.31.1776689429964; Mon, 20 Apr 2026 05:50:29 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4cb13a0sm29092510f8f.8.2026.04.20.05.50.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:29 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:27 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport Subject: [PATCH RFC v2 03/18] mm: add PG_zeroed page flag for known-zero pages Message-ID: <48c5f902f03a72e4337979f5193c64017675f72e.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add PG_zeroed (aliased to PG_private) to track pages whose contents are known to be zero. Exclude __PG_ZEROED from PAGE_FLAGS_CHECK_AT_PREP so the allocator does not BUG when encountering zeroed pages on the free list. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- include/linux/page-flags.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index f7a0e4af0c73..f87ecb740e7f 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -157,6 +157,9 @@ enum pageflags { */ PG_fscache =3D PG_private_2, /* page backed by cache */ =20 + /* Page contents are known to be zero (host-zeroed or balloon) */ + PG_zeroed =3D PG_private, + /* XEN */ /* Pinned in Xen as a read-only pagetable page. */ PG_pinned =3D PG_owner_priv_1, @@ -687,6 +690,14 @@ FOLIO_FLAG_FALSE(idle) */ __PAGEFLAG(Reported, reported, PF_NO_COMPOUND) =20 +/* + * PageZeroed() tracks pages whose contents are known to be zero. + * Set on free-list pages by the balloon driver or page reporting. + * The allocator uses this to skip redundant zeroing. + */ +__PAGEFLAG(Zeroed, zeroed, PF_NO_COMPOUND) +#define __PG_ZEROED (1UL << PG_zeroed) + #ifdef CONFIG_MEMORY_HOTPLUG PAGEFLAG(VmemmapSelfHosted, vmemmap_self_hosted, PF_ANY) #else @@ -1209,7 +1220,7 @@ static __always_inline void __ClearPageAnonExclusive(= struct page *page) * alloc-free cycle to prevent from reusing the page. */ #define PAGE_FLAGS_CHECK_AT_PREP \ - ((PAGEFLAGS_MASK & ~__PG_HWPOISON) | LRU_GEN_MASK | LRU_REFS_MASK) + ((PAGEFLAGS_MASK & ~(__PG_HWPOISON | __PG_ZEROED)) | LRU_GEN_MASK | LRU_R= EFS_MASK) =20 /* * Flags stored in the second page of a compound page. They may overlap --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 62D2D39BFEF for ; Mon, 20 Apr 2026 12:50:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689439; cv=none; b=kGPZoW5RocAorrnByALyLwttIKU7uYrLd4RVKbT0bN9it0UUfgqiW1vtZgK9PODYVfCAcljntT+uIR9sPHgQd4zHJVsFbDlGzIzb/ovkmNeF55z0GZ2H+YlZvSD/tjidtOHmOmwrvxibi9vgZUAqOCxVganemxXBP9pxI62a6wQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689439; c=relaxed/simple; bh=SSlJYD4HhH0/DNIli18gkk7d7BXgedl64d82fyPnD40=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ZTw1KfbkdZL2wsrQ81ytKDbCltf7pYkU3hCoXxj2Kgj+MlVL8gFsn+D2hcEDkhBddI0fjag4pLPsqT4tZSJI5Hb+BsPsNK1XzfJF0tV38KCgMBSYc7yp9cz0wY4WS34mXOhMqcirWyaCME4AG/qA/o0K0z59DPlc+NcMg3yAxEI= 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=BT4zIGoH; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=WP+uIh7m; arc=none smtp.client-ip=170.10.133.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="BT4zIGoH"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="WP+uIh7m" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689437; 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=L5nC5ya61lMqmOhAB+HMSdub/zT5DYdzZ4+bbmAFmmI=; b=BT4zIGoHLB8AIkNPwL6eHXD2guZir3FMfscCgZ8V7iTjBWP3M+qDBp8aBFffodt5sUmK9V lD9JxsqVzlsK4Y+XowRCpgQIJwL8WrRoD8x2LQJjif+ysSjuXkIhOx1BzfhqkWlAHbte2n bxV8lNpxho2r0ydaEr7lOBg6msOx8N4= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-454-NHy_774FMO-QE7Ns_MLggw-1; Mon, 20 Apr 2026 08:50:35 -0400 X-MC-Unique: NHy_774FMO-QE7Ns_MLggw-1 X-Mimecast-MFC-AGG-ID: NHy_774FMO-QE7Ns_MLggw_1776689434 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-43d7757463eso2242766f8f.0 for ; Mon, 20 Apr 2026 05:50:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689434; x=1777294234; 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=L5nC5ya61lMqmOhAB+HMSdub/zT5DYdzZ4+bbmAFmmI=; b=WP+uIh7m0F4rOnRh5MPA7tbcwiGYBVTdisVnIlC9w4a+FrXSJ5GlI9lfL+gWDIFFDg r86SLI/Qwjf0EJQ20oCPfYKa0JWdaBMU1ISZJ4RO4717XFJnkJKcw4Su9XIK04aee2+5 iwx6HA8Z9Zyq3uV4fpf1AP6xyrSk30u1iSdlJdAidPReYgXtP76qnrvKVZzZo7bTIFkn 3nq9+Gv10MQevfB29PXydA+bHCi8kxIz0JNrpTUIiERNtQGHEMN3Vx6MtagcFcZ5uzNf E9EtvebZ8hkHlVIKEJ3TfFxTEZjwf+TImIrADV4x7DtAi5DQ/WQvuntUqGp1naHsufp+ 4wQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689434; x=1777294234; 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=L5nC5ya61lMqmOhAB+HMSdub/zT5DYdzZ4+bbmAFmmI=; b=Q55AejnmPJc7V0XnFfiyz8JImCqqgapIOU3IlWznt0irYsKqtuWWsAp1X2Ibv9vOWC RB9wLVF0IHzjFUYztW6ueUPSQRiLA3oV3GM8yXHkY8nCsRBvtGAxsnGNix99u8sRkWJA kE4hfdhjiHRb9T5oS07+B46VgbIsX7aRfaHZhTfeOsdovgJfHAUWMVeI6yWyNnE9ns1A xISwLaxkJEXj/aa8CQ8ID6n2aMI6V4M/7iMFyfXdq3dPr8PR0C60wId/J2WVR+qESEgd Sjqerju0CC1QuW7r8Krt8QfT+EgXe4VnxqxhaN3h3tFiHpG8QfcsYc/dRZvnRvJGp1xH ZXdQ== X-Gm-Message-State: AOJu0Ywfx9xaqSmd2ifkhQ2cx1KXiz4tQ4RRfEjShUT71oHDhJ4HWyct WbwWLAM/zsjE4G9iK+IxRyo3JPu9ReAu5gnRH/FUPBSLz1vs2rAdzwYltquI2wcDHo702xzyAbt A8SB/6zwhffDCJXPywWnjWW3ppuy+s8z2jeeSMfPMNwQWsvmhMBHVOQorsSuITSR7Ci+fx17UnB WuorecotEzBgSfOgxb3A/49IYlXAz9l1Nwu38HzDW8auc= X-Gm-Gg: AeBDievZu8xFhFnZagiBoEu/wsr/xYYF7bpw1PMIYAtLM9/72YmI47azf79MlhuEfkX 2o1Hez/HW806XblfkVrhKjJ/B9TDHb5y1XKv7uE+zKQEjlOCKDMM/+Xu5jWGRFZd/En8hrk9cLC hbSrEJhjeqP4f5Bd/p032i+TXAp7G/Ij+JEJUxRuQ0McfcSOHxgnS0ZicRgzoYKhBY50mTChJ8h +4PmbCc9FGRAgaXk2AX671gXvtAli6TJyLLp/Ng41J1s2rB5b6a5gnUMHSgNSeijCJ6CBGz/4Q2 rz86xg99j/8LtOhwjmj8NAT9uiUXp9FRBW6d9XLeNM9zjg3i3kQwrShliC4ohuP++2p+9bldNjU 4rLSBSAv3MMSigNll6+TsVef2SyINiR7FSC6eTx3XKAaSR2549/hH1w== X-Received: by 2002:a5d:6f13:0:b0:43e:a703:3675 with SMTP id ffacd0b85a97d-43fe40329ecmr17814969f8f.5.1776689433281; Mon, 20 Apr 2026 05:50:33 -0700 (PDT) X-Received: by 2002:a5d:6f13:0:b0:43e:a703:3675 with SMTP id ffacd0b85a97d-43fe40329ecmr17814892f8f.5.1776689432659; Mon, 20 Apr 2026 05:50:32 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e4d112sm32443947f8f.29.2026.04.20.05.50.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:32 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:30 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan Subject: [PATCH RFC v2 04/18] mm: page_alloc: track PG_zeroed across buddy merges Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Preserve PG_zeroed when two buddy pages merge in __free_one_page(). Set it on the merged page only if both buddies are known-zero. A buddy is known-zero if it has PG_zeroed set, or if it is reported and the host zeroes reported pages. Without this, a zeroed page freed via free_frozen_pages_hint could merge with a non-zero buddy, and the merged page would falsely appear zeroed. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/page_alloc.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f7abbc46e725..6adc894748c8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -984,6 +984,8 @@ static inline void __free_one_page(struct page *page, unsigned long buddy_pfn =3D 0; unsigned long combined_pfn; struct page *buddy; + bool buddy_zeroed; + bool page_zeroed; bool to_tail; =20 VM_BUG_ON(!zone_is_initialized(zone)); @@ -1022,6 +1024,8 @@ static inline void __free_one_page(struct page *page, goto done_merging; } =20 + buddy_zeroed =3D PageZeroed(buddy); + /* * Our buddy is free or it is CONFIG_DEBUG_PAGEALLOC guard page, * merge with it and move up one order. @@ -1040,10 +1044,17 @@ static inline void __free_one_page(struct page *pag= e, change_pageblock_range(buddy, order, migratetype); } =20 + page_zeroed =3D PageZeroed(page); + __ClearPageZeroed(page); + __ClearPageZeroed(buddy); + combined_pfn =3D buddy_pfn & pfn; page =3D page + (combined_pfn - pfn); pfn =3D combined_pfn; order++; + + if (page_zeroed && buddy_zeroed) + __SetPageZeroed(page); } =20 done_merging: @@ -1730,7 +1741,8 @@ struct page *__pageblock_pfn_to_page(unsigned long st= art_pfn, * -- nyc */ static inline unsigned int expand(struct zone *zone, struct page *page, in= t low, - int high, int migratetype, bool reported) + int high, int migratetype, bool reported, + bool zeroed) { unsigned int size =3D 1 << high; unsigned int nr_added =3D 0; @@ -1761,6 +1773,8 @@ static inline unsigned int expand(struct zone *zone, = struct page *page, int low, */ if (reported) __SetPageReported(&page[size]); + if (zeroed) + __SetPageZeroed(&page[size]); } =20 return nr_added; @@ -1772,9 +1786,11 @@ static __always_inline void page_del_and_expand(stru= ct zone *zone, { int nr_pages =3D 1 << high; bool was_reported =3D page_reported(page); + bool was_zeroed =3D PageZeroed(page); =20 __del_page_from_free_list(page, zone, high, migratetype); - nr_pages -=3D expand(zone, page, low, high, migratetype, was_reported); + nr_pages -=3D expand(zone, page, low, high, migratetype, was_reported, + was_zeroed); account_freepages(zone, -nr_pages, migratetype); } =20 @@ -2333,7 +2349,7 @@ try_to_claim_block(struct zone *zone, struct page *pa= ge, del_page_from_free_list(page, zone, current_order, block_type); change_pageblock_range(page, current_order, start_type); nr_added =3D expand(zone, page, order, current_order, start_type, - false); + false, false); account_freepages(zone, nr_added, start_type); return page; } --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 66ADA375ACF for ; Mon, 20 Apr 2026 12:50:39 +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=1776689440; cv=none; b=Q0kdzp7DlZANRLvqLSV5d2B+hUwfcYk4yVSRDQNOc/jCXY05Z8BK7b4OdxSTO6LLxZrqpyj7N1jh/ipf3C6LlzVSnsCrYxV/wjtlK2iL4El8QcnD+02YcoerWrJkcLkMsCalK5ESvzdvBXv91uOA1YpT7J6fJ1hcI/slTcQIlCs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689440; c=relaxed/simple; bh=pJyVKKoRMp8v4PnofjcMEJwk3zM1uIs2Ipko/ZCecJA=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=VRr/pgMvTEyWFjcOlzvjCvZ1psEqf8aAEqh3XghR2Hz6DZP6Cl+/5rPxBuCXLiGADclGwcuzo1iG5b0uQxWx0ErsfMwObYkxlc6Iu3v+YvgQ/WrgZf2XNuNH8S2BI051q1SxG9YrzfscUvuv0+Ceeg8C4WPyFGK6YK5EPv6JYxU= 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=E/cMEC/E; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=A7Oznq8m; 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="E/cMEC/E"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="A7Oznq8m" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689438; 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=IETrtHkv4WyAsn+xKXnLATQqoj86uMIE60X1mP6bLOg=; b=E/cMEC/EaznxUSe+vb3VGfVKWXPdXrDdaHUjjSpOSWZ1lLQMwZWSSt44/Jl0mLmy1roKPc Iu4ZiQOtH4MQ5T4pMlm0UO0wooiKhpA4CGwUisVhqla7pXuTHLCfDvrcb8YUtnZMmD7dk0 /EnW5QLy6IYslNqcZM3LCUmWZeOkb3E= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-651-4SAPmumLMoy_u2A5nSEEBQ-1; Mon, 20 Apr 2026 08:50:37 -0400 X-MC-Unique: 4SAPmumLMoy_u2A5nSEEBQ-1 X-Mimecast-MFC-AGG-ID: 4SAPmumLMoy_u2A5nSEEBQ_1776689436 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-43d7e5b98ebso2622301f8f.0 for ; Mon, 20 Apr 2026 05:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689436; x=1777294236; 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=IETrtHkv4WyAsn+xKXnLATQqoj86uMIE60X1mP6bLOg=; b=A7Oznq8mjNOKYSuHyXTGDam70TwSDk7zJaUGKtKxgFFw7ME2TglXY2lg/m/JBxMEcC a4ee4Nt9G3DsKX8K1zwXHtNfjpCP2HT1GNmp4dd+j2S0oVu1rwkTti6B0t+xhHslCFDz 7JmngFCAc9FkQLUVT+jBhYslenLdMJPy1ySdbMtZpmpDav3ZH17XGl/8i5htcycXzlo3 3HQ/AsoFWAFZ4SoqYHBv+OagpQ5TMEKfdaHCdPCY/xEUwrxisuoQppsRPo8ItUNY7jbS fBJ0+hQgDwghuqPgihw4iUx+JrlEvMOGt0bVUQ2lQfw5go5RNcqKD/7ZQb8ZNdjwF0uj YxOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689436; x=1777294236; 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=IETrtHkv4WyAsn+xKXnLATQqoj86uMIE60X1mP6bLOg=; b=S3MqE83XCC59tW/F74IfZAJRpCjalmWqw8vIqBmOBmZmdZ8Oc7/CccMo1FpRsFeaMz fpV5dxgzAbQW85Szp1JABnX/0U8ZjVR0yrX/VTOC+dOvd5pCjA5dPC2lc0cq6bjR7fMK ODjMuzzJMo9NxteGfENcf15KTZXVonDgI92prbhfFQPuYrNxZgOGXVUp8t04FzsikXAw lBp4IX1tRhXJLCEMF2IAoJWG/BnaZR8X8wZzQOBMb7+N1mKlIi6aknmQOlVSPgw0La+s Kv7/1gQvY1YTUtjgHc7pimMoN6vnz4/fLH8aw3KYO5lNXgxjLgOsADS1dUy8Z5rIdcJG UkCA== X-Gm-Message-State: AOJu0YwoLbmE5oNKf9EKttvcXheEeb23WwDsULNLmE5F9ihDvMQSr2k2 oLPi20FQ2pxcddD67g4DSUKGnQ5gFXJTGmH/kVyzl3bIv40+eFluwMQWm2DPs3ieVuKiV5KyEPb WKp9rMPLme0uZ8Di+8Jo5Drj9A8rtq6NcFIfgErLse43Svvsm44rdkTo6qwixzO5jh+W2ydR37N 5ZE6NQITZjCz95nrYacCnQ7KewTaZ8/laG/E5iWQEr1f8= X-Gm-Gg: AeBDiesQwloPrJvVqq5/VAVNMsvYcfNe7tQTucFTnmUiz5eeCt6BZDVh8ckpVLg9j2K LCdjv6dBwWvCBMLnBZgvWx4WJUFf9T8Neo9+mT05Zc5np0UWr8szqXDjT7W/5YynTNviozQQyBr iImGJMJe5w+vPV7/kvunTFwZbRCqvXSuXdrJ9El9pbqJ+L2fIhV7b0FDvEmK/ubwSQPi1fBBztA +mL+cTkT+7K3dtXo3WZ8g1ba+a9P1XWMj59PzK+9iFCjNBUAOoJENnD1yZBu/iIZGVAkzwJnGAR VhqQ/Axiy6WG5tsRHayPyQIpF5pAudaSpCsgZEQVxBOMXU/xHD4B7hhavbLa356nGaL6duFGrwX tCxOGDIkRAHgwt0LiqN41Ea9kgbNQC9X6F1PEZguo5XuntVna5sRDtw== X-Received: by 2002:a05:6000:2308:b0:43d:76d8:5794 with SMTP id ffacd0b85a97d-43fe3e14f8dmr22172823f8f.36.1776689435844; Mon, 20 Apr 2026 05:50:35 -0700 (PDT) X-Received: by 2002:a05:6000:2308:b0:43d:76d8:5794 with SMTP id ffacd0b85a97d-43fe3e14f8dmr22172730f8f.36.1776689435207; Mon, 20 Apr 2026 05:50:35 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e59f97sm32291619f8f.37.2026.04.20.05.50.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:34 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:32 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan Subject: [PATCH RFC v2 05/18] mm: page_alloc: preserve PG_zeroed in try_to_claim_block Message-ID: <0be843ccdd029d61887f199123cce216dcbbdead.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" try_to_claim_block() calls expand() with false for both reported and zeroed, losing the zeroed state for claimed pageblocks. Capture reported and zeroed state before del_page_from_free_list() clears PageReported, and pass them to expand() for sub-page propagation. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/page_alloc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6adc894748c8..b0971a1eaa73 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2345,11 +2345,13 @@ try_to_claim_block(struct zone *zone, struct page *= page, /* Take ownership for orders >=3D pageblock_order */ if (current_order >=3D pageblock_order) { unsigned int nr_added; + bool was_reported =3D page_reported(page); + bool was_zeroed =3D PageZeroed(page); =20 del_page_from_free_list(page, zone, current_order, block_type); change_pageblock_range(page, current_order, start_type); nr_added =3D expand(zone, page, order, current_order, start_type, - false, false); + was_reported, was_zeroed); account_freepages(zone, nr_added, start_type); return page; } --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 E07E7397694 for ; Mon, 20 Apr 2026 12:50:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689444; cv=none; b=NBKmSmrAM4vQYMLs74Zr+MOKsDT7k3ZnImcjcapvL9zC3rViCF+Vi1nbkZfh0EiK2GluWIPF+GdGXTEAJPXS5Nbu8wrVsxXjMwAnskVHLYVXewu6XMoyLN9Tn2fCUVBtvQ7v2o3LXD1kwBZ4cC7rx+l1SUMBBFUIMgebMo0a3Io= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689444; c=relaxed/simple; bh=neg6eIdJRVkDfxbADXvR7pQbjSovMoDrB+ifUOQr2bM=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=c3oT8e1gRbidzi0S5zples6LFNLRFJv83JroT9+mnJapgGjMjAnV2Hp5VhV+3lSACkmw9dhDyVB4mUfKhPeejBYC9kxd4lBSBma8PhlAujsZBYUDro487qWTpX3SFlw+PGcRyJydjjmvkNzmzXE7dxdEa7+VPupJjSzCvV3W1dg= 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=bdFwf9bQ; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=qWaPPnSs; arc=none smtp.client-ip=170.10.133.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="bdFwf9bQ"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="qWaPPnSs" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689442; 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=FOqefyw2xfKGzGmt4FILCNloyRh5kydROPG1tzzp9Iw=; b=bdFwf9bQjCgih+engzQ1XPLkf9gGYupMRmkkl6DMEIELTPLmIAMZUAR3q3COQCguOO0n0I qiYbwQLUQ0jCtj+LLVs0va/HrNo+BPA2VDknkbdGBZOo/n9hdMG+wOdTx8zOH7QYV3HubZ lGqD0KiXF16y9p1Tf5KSYbtT2Sl/Gnc= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-302-DdnLnHVyMKW6pQJi-aprGw-1; Mon, 20 Apr 2026 08:50:41 -0400 X-MC-Unique: DdnLnHVyMKW6pQJi-aprGw-1 X-Mimecast-MFC-AGG-ID: DdnLnHVyMKW6pQJi-aprGw_1776689440 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-43d7730e9e3so2162991f8f.2 for ; Mon, 20 Apr 2026 05:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689439; x=1777294239; 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=FOqefyw2xfKGzGmt4FILCNloyRh5kydROPG1tzzp9Iw=; b=qWaPPnSs9UQOeN8mvUdPNcoU3ltlAN8pNUNy7ApupJKjYGJZJe2CH/oq7lz1u6LHKe VFiaoC7+SDouwKQ61UhF2aFMKroiFxZ/yYz5JetK2m5IL/Iny4gp35IPgfjvcDchLcfD P4QFC4WEeVbaiykiftqCw2ArVo+7kX/D9zw4JIOnzjVVHmjf+mKSbcRup+MQFp4SyL5H ULcYV1CBBOxCIMZ6Gayb0lr1lYslXcUWF61gtAYiddZ4uOLkn4ui1/Xfq+U+/aMGUOMo mK4pd4DMYdwG0zh32w0k9hA/IztN2cE0lCHQ6eOwGG7fWlKK/oFInC+CW0+cve+SJlS3 XZyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689439; x=1777294239; 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=FOqefyw2xfKGzGmt4FILCNloyRh5kydROPG1tzzp9Iw=; b=AQs2/R9era9WohHJ4PKSqt7ga+6baDnpsKHjgmUiWTMxVbSOkyPyq0JP6wOqhV2Gui fgO/OHjfv3GPVuzPvvE9EXmjjeKfIfy/zi4MAZSSvun0y5LKtMzJMHXZIrkixtN0HnZ+ KOu3Sd9EUlvNmyez6kKmVpfm+DqaFq7p4V6VLDcn49B5A16zb+ED7pxqDyRwzC9P6eqe ZfPhL0rDK+9ZyCLaOynidROPIH5lOJ1SJrgHrhui4kbAgMnbhANzW6CNvP4ifPo8C5AD DrMHEsC3qGBlbBwhPyrvR08v+j1DgVI01EWG/oZCdfmWUItdNvzO5xeu5jMUqEZC1XC6 M8Dg== X-Gm-Message-State: AOJu0YwtsiFpV0ymmcNLcmKq5ThrTRuiCBM9e65RMqPyNG+C9Hxp/gXP uToDxHkPP0f1iv1iKAV/L07Kpw4nN9VmQFHkN6WYlRdgtSqCEQkQJG1jtS0MOuvC+nrBmctpgyY N/jkseqj+0yp3LoOnkdATs/HimWMaPvwipU+qmKQZowOCwbajb4MYk3of9HbsrxJAHhK7c8KL4q mY+a66yawdndHh2Y8R25XniZSKzYBpcdffBHh8WC0UdlA= X-Gm-Gg: AeBDiesmgAww/NBJim8OllBhGoA6brXo7s+2KAQOfoB89EJKDtqtZ9pWBgTVkmsQKL6 d8Y/+VIztRU5l6g5BQBg4G6GjqJLoCrNlsuuN/8I3jm5qkfJb+W8dsme/ouJoiyb9pkwVKvyQNh BI/JXFVbMhAShW2+MphytqFY645lowqcGJFp9kVBu+6TkwjKYIW0dWqwF4aLl9ps3wzh/PByWwf Cc6l3WidURL8Ns9bjydu35MP3+aPZPOLOxhbMyEZUwgw7A1XsdKFU8f4pmQKFz+w0g/2vfvMQyq xuXCKIPi4EOs1OKFJOkcg7rvktiYnQ5zMRtxOGvjGglElZc9Y6AsxEVw1kgV7G6tAA4MpPJQUZl 57JuVsGda5dtYj90ku4/FVgR1iScz9AdlJosbxHjSt54CuTg6zA6gPg== X-Received: by 2002:a05:6000:40dc:b0:43d:7b7b:ab77 with SMTP id ffacd0b85a97d-43fe3dcbbeamr19710829f8f.11.1776689439206; Mon, 20 Apr 2026 05:50:39 -0700 (PDT) X-Received: by 2002:a05:6000:40dc:b0:43d:7b7b:ab77 with SMTP id ffacd0b85a97d-43fe3dcbbeamr19710690f8f.11.1776689437905; Mon, 20 Apr 2026 05:50:37 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4cb1249sm25931964f8f.5.2026.04.20.05.50.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:37 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:35 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan Subject: [PATCH RFC v2 06/18] mm: page_alloc: thread pghint_t through get_page_from_freelist Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add pghint_t *hints to get_page_from_freelist() and pass it to prep_new_page(). All internal callers except the main fast path in __alloc_frozen_pages_hints_noprof() pass NULL. The next patch uses this to return hints from post_alloc_hook() to callers via __alloc_frozen_pages_hints(). Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/page_alloc.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b0971a1eaa73..ece61d02ea96 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2483,7 +2483,8 @@ __rmqueue_steal(struct zone *zone, int order, int sta= rt_migratetype) continue; =20 page =3D get_page_from_free_area(area, fallback_mt); - page_del_and_expand(zone, page, order, current_order, fallback_mt); + page_del_and_expand(zone, page, order, current_order, + fallback_mt); trace_mm_page_alloc_extfrag(page, order, current_order, start_migratetype, fallback_mt); return page; @@ -3294,7 +3295,8 @@ struct page *rmqueue_buddy(struct zone *preferred_zon= e, struct zone *zone, * high-order atomic allocation in the future. */ if (!page && (alloc_flags & (ALLOC_OOM|ALLOC_NON_BLOCK))) - page =3D __rmqueue_smallest(zone, order, MIGRATE_HIGHATOMIC); + page =3D __rmqueue_smallest(zone, order, + MIGRATE_HIGHATOMIC); =20 if (!page) { spin_unlock_irqrestore(&zone->lock, flags); @@ -3414,7 +3416,8 @@ static struct page *rmqueue_pcplist(struct zone *pref= erred_zone, */ pcp->free_count >>=3D 1; list =3D &pcp->lists[order_to_pindex(migratetype, order)]; - page =3D __rmqueue_pcplist(zone, order, migratetype, alloc_flags, pcp, li= st); + page =3D __rmqueue_pcplist(zone, order, migratetype, alloc_flags, pcp, + list); pcp_spin_unlock(pcp, UP_flags); if (page) { __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order); @@ -3451,7 +3454,7 @@ struct page *rmqueue(struct zone *preferred_zone, } =20 page =3D rmqueue_buddy(preferred_zone, zone, order, alloc_flags, - migratetype); + migratetype); =20 out: /* Separate test+clear to avoid unnecessary atomics */ @@ -3835,7 +3838,7 @@ static inline unsigned int gfp_to_alloc_flags_cma(gfp= _t gfp_mask, */ static struct page * get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags, - const struct alloc_context *ac) + const struct alloc_context *ac, pghint_t *hints) { struct zoneref *z; struct zone *zone; @@ -4084,14 +4087,14 @@ __alloc_pages_cpuset_fallback(gfp_t gfp_mask, unsig= ned int order, struct page *page; =20 page =3D get_page_from_freelist(gfp_mask, order, - alloc_flags|ALLOC_CPUSET, ac); + alloc_flags|ALLOC_CPUSET, ac, NULL); /* * fallback to ignore cpuset restriction if our nodes * are depleted */ if (!page) page =3D get_page_from_freelist(gfp_mask, order, - alloc_flags, ac); + alloc_flags, ac, NULL); return page; } =20 @@ -4129,7 +4132,8 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int or= der, */ page =3D get_page_from_freelist((gfp_mask | __GFP_HARDWALL) & ~__GFP_DIRECT_RECLAIM, order, - ALLOC_WMARK_HIGH|ALLOC_CPUSET, ac); + ALLOC_WMARK_HIGH|ALLOC_CPUSET, ac, + NULL); if (page) goto out; =20 @@ -4227,7 +4231,8 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned= int order, =20 /* Try get a page from the freelist if available */ if (!page) - page =3D get_page_from_freelist(gfp_mask, order, alloc_flags, ac); + page =3D get_page_from_freelist(gfp_mask, order, alloc_flags, + ac, NULL); =20 if (page) { struct zone *zone =3D page_zone(page); @@ -4477,7 +4482,8 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned= int order, goto out; =20 retry: - page =3D get_page_from_freelist(gfp_mask, order, alloc_flags, ac); + page =3D get_page_from_freelist(gfp_mask, order, alloc_flags, ac, + NULL); =20 /* * If an allocation failed after direct reclaim, it could be because @@ -4831,7 +4837,8 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int o= rder, * The adjusted alloc_flags might result in immediate success, so try * that first */ - page =3D get_page_from_freelist(gfp_mask, order, alloc_flags, ac); + page =3D get_page_from_freelist(gfp_mask, order, alloc_flags, ac, + NULL); if (page) goto got_pg; =20 @@ -5249,7 +5256,7 @@ struct page *__alloc_frozen_pages_hints_noprof(gfp_t = gfp, unsigned int order, struct alloc_context ac =3D { }; =20 if (hints) - *hints =3D (pghint_t)0; + *hints =3D 0; =20 /* * There are several places where we assume that the order value is sane @@ -5279,7 +5286,8 @@ struct page *__alloc_frozen_pages_hints_noprof(gfp_t = gfp, unsigned int order, alloc_flags |=3D alloc_flags_nofragment(zonelist_zone(ac.preferred_zonere= f), gfp); =20 /* First allocation attempt */ - page =3D get_page_from_freelist(alloc_gfp, order, alloc_flags, &ac); + page =3D get_page_from_freelist(alloc_gfp, order, alloc_flags, &ac, + hints); if (likely(page)) goto out; =20 @@ -7855,7 +7863,8 @@ struct page *alloc_frozen_pages_nolock_noprof(gfp_t g= fp_flags, int nid, unsigned * Best effort allocation from percpu free list. * If it's empty attempt to spin_trylock zone->lock. */ - page =3D get_page_from_freelist(alloc_gfp, order, alloc_flags, &ac); + page =3D get_page_from_freelist(alloc_gfp, order, alloc_flags, &ac, + NULL); =20 /* Unlike regular alloc_pages() there is no __alloc_pages_slowpath(). */ =20 --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 6491A3A0EA5 for ; Mon, 20 Apr 2026 12:50:45 +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=1776689446; cv=none; b=OtIClZkrLqran1JCR3V9dGr9h/f7s8Jdnd2w0pNybMVOq8L7LfFPoVgVdM4edLgWx/6X+mlCraqotMClmw7QNChY0nvG1xgvNZlC+NoMb9QYMRfnYIdLhKBXVWHpWN6/nzHoQ5HrO0FEbVcRdoniWKPmY1QesFhdGXROWG8bYIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689446; c=relaxed/simple; bh=xGH+Tbv6Ot2NIFWvdduKCymUO4Ct3OBttETzUcGBWZ8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Dv+Tv3PH+VqpcaMnhO1UaL1wtoRupBfQ/RdIuuUrx+GvcEWZSAqaF7c/V8tWZhssgl2crobOI64VnqG36UnbjyxLolJaFN59Plaou6Uwr9V4WH14jybzWvgbTXG8Mmczt4DxS12kyOWQ0ZhNwk44KPjCfXrsnlMAVbfeXLrQCOw= 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=iGbhMUp+; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=lQ+8F3F4; 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="iGbhMUp+"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="lQ+8F3F4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689444; 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=YJcG0BVg25HZ2E/z9uEY2PXmC8ZZQ0Dy/q/+TJStPMY=; b=iGbhMUp+mOsUpon+xH39dAXASkRveFClob3YiI8Xxg/7saEtw0L4c4/Q1/Q/c3LJdzCfHs +uhf0BCWlgP8vxAd7/702gyxGlRD6L+L1l1qf75sVWkJSiwPTgnO/68e36kQgeCuIvy3AU sbFFWIX0WS4P9kAvUt2sr4awKp8L8AM= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-665-Qn60V-b_MnSsZglcfAMAeg-1; Mon, 20 Apr 2026 08:50:43 -0400 X-MC-Unique: Qn60V-b_MnSsZglcfAMAeg-1 X-Mimecast-MFC-AGG-ID: Qn60V-b_MnSsZglcfAMAeg_1776689442 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-488e097a270so22536345e9.1 for ; Mon, 20 Apr 2026 05:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689442; x=1777294242; 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=YJcG0BVg25HZ2E/z9uEY2PXmC8ZZQ0Dy/q/+TJStPMY=; b=lQ+8F3F4M0EltZx+7OuHjTLIzTkttSPbiDR+9MkHs2gWuN7yufqaXq1OjMxTceRK6O 1Me3MfGl0zHAoIFMaqW0TlFQTqA5yvo/NTwVBy+T2aeFuVggDc+igF6WDxuuB0Oqu6Y/ nYOydCQ9UfY4vzkssjtj/h1AcFV13Y+k8biecdxcTGfImkT2pcxZPl4uQB4C8pluSJ8R 8h8zwRJ5EjIM1awigpx3kuQrFQpermQYnuNk88iqYzi1T/Pk3GrCu9wxm7dZv2rjClLK /9+ud1bt4zMlMOI9UxVQUDgpUVQfki5L2QCEXPjtTZN7++jBdYifrdCSBzo33KW9tUSl CZ1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689442; x=1777294242; 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=YJcG0BVg25HZ2E/z9uEY2PXmC8ZZQ0Dy/q/+TJStPMY=; b=BHXWySsFMUgzjqcrzcD95FbDaqZy8oMqp7pMYCUO2I9GQI8hUKFlcDKofMpdArRMpx cMtvGLAxf7/EddwmIVEjcPLTmfFo2DHiaeWfmRVt3MGFK+J7TdiIkzE9ZW3iTPiMB9By OrHJlmbMVXPSD5VPHXMkE+O5aJgOQVj9B8hCWcK5pG+JmDUNnbnOusAehEodYsmPJIk0 nQKZZhLFcAZDmP4ktjtKxvmlGJPObVsG56SbEbTnpc6DYfY0wbk9+aEaK77xWEN2UAbN Ik5GMHkG5113lCxAIk704hRc5vjSJI/83989sEouLBWGqo4AJDk/0/kM7uEc0egGdRk1 kL3g== X-Gm-Message-State: AOJu0Yy6evILz9K2JIsN+moQS+48+FmrLySTCMusN6w9KL1Niy4SPSpp JspZE/4WgXPO/E1Bpq3bIqx1uLcRmwL++73e0wzaHnv3M2z5CvHwC02MEEW3REhxYXsNeLplUZs +SQS2rexQGA4kchTJQqbw+LY3JUJ2+HZnmpFGq6l6pZ8pn+Hn7Gp9200dGi+00BBc17IiwkuLCi 7cJglAnLLH7AFwBXeQe0kwT8EqyqDwqlebEzSP3p5xFvo= X-Gm-Gg: AeBDiev2LLmhkTua+7vV56O8GtfezcgR5bYMZfdG+iomU65nCF4FT7rMBSZT9b7LMm+ eVvxc77geWc1O0NWFDbDbeXmbGptMRd1aARm3PTmCwbKOu7m3gRQn/c+KphaxyXbUiRSoAlX6nS WV4T0gC1tM81Ah7uR9op5G+GvPiDMjAkxkXTAsz9YXURnuZX4YyHLq0GHUubX26eCoF/DtRrBzt wnrbfyEPZyvRWuJYVyvSfnjdh9q9xUSAXYhNcCDZQZtN2CmnFbfo71dP0XIQTT0pUIn2EkGLrSc JpeXCoKAagF6GqpEohSme9MvWa6yWbiUA/KHL6ucqkyjbTLQdBInUR6tNdeYGOh/CcktC2GjtVa BhmayMMMitHsqk7awAJ66oO4QuSFB4nJdTYpYLfX0OmWbB748QFXBUA== X-Received: by 2002:a05:600c:4f0c:b0:489:1c1f:35e6 with SMTP id 5b1f17b1804b1-4891c1f38c8mr61834955e9.6.1776689441768; Mon, 20 Apr 2026 05:50:41 -0700 (PDT) X-Received: by 2002:a05:600c:4f0c:b0:489:1c1f:35e6 with SMTP id 5b1f17b1804b1-4891c1f38c8mr61834045e9.6.1776689441052; Mon, 20 Apr 2026 05:50:41 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fb7bf696sm89203495e9.32.2026.04.20.05.50.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:40 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:38 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan , Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport Subject: [PATCH RFC v2 07/18] mm: post_alloc_hook: use PG_zeroed to skip zeroing, return pghint_t Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add pghint_t *hints parameter to post_alloc_hook() and prep_new_page(). post_alloc_hook() reads PageZeroed, clears it, and returns PGHINT_ZEROED via hints. This provides a single point where PG_zeroed is consumed and cleared, regardless of whether the page came through PCP or buddy. The flag is set in page_del_and_expand() and survives both paths until post_alloc_hook() consumes it. Only get_page_from_freelist() passes hints through prep_new_page(); all other callers (compaction, bulk alloc, split, contig) pass NULL. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/compaction.c | 4 ++-- mm/internal.h | 3 ++- mm/page_alloc.c | 25 +++++++++++++++++-------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 1e8f8eca318c..6fcce7756613 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -82,7 +82,7 @@ static inline bool is_via_compact_memory(int order) { ret= urn false; } =20 static struct page *mark_allocated_noprof(struct page *page, unsigned int = order, gfp_t gfp_flags) { - post_alloc_hook(page, order, __GFP_MOVABLE); + post_alloc_hook(page, order, __GFP_MOVABLE, NULL); set_page_refcounted(page); return page; } @@ -1833,7 +1833,7 @@ static struct folio *compaction_alloc_noprof(struct f= olio *src, unsigned long da } dst =3D (struct folio *)freepage; =20 - post_alloc_hook(&dst->page, order, __GFP_MOVABLE); + post_alloc_hook(&dst->page, order, __GFP_MOVABLE, NULL); set_page_refcounted(&dst->page); if (order) prep_compound_page(&dst->page, order); diff --git a/mm/internal.h b/mm/internal.h index 686667b956c0..2964cdfcd31f 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -887,7 +887,8 @@ static inline void prep_compound_tail(struct page *head= , int tail_idx) set_page_private(p, 0); } =20 -void post_alloc_hook(struct page *page, unsigned int order, gfp_t gfp_flag= s); +void post_alloc_hook(struct page *page, unsigned int order, gfp_t gfp_flag= s, + pghint_t *hints); extern bool free_pages_prepare(struct page *page, unsigned int order); =20 extern int user_min_free_kbytes; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ece61d02ea96..a4cfd645599a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1863,13 +1863,21 @@ static inline bool should_skip_init(gfp_t flags) } =20 inline void post_alloc_hook(struct page *page, unsigned int order, - gfp_t gfp_flags) + gfp_t gfp_flags, pghint_t *hints) { bool init =3D !want_init_on_free() && want_init_on_alloc(gfp_flags) && !should_skip_init(gfp_flags); bool zero_tags =3D init && (gfp_flags & __GFP_ZEROTAGS); + bool zeroed =3D PageZeroed(page); int i; =20 + __ClearPageZeroed(page); + if (hints) + *hints =3D zeroed ? PGHINT_ZEROED : 0; + + if (zeroed && !zero_tags) + init =3D false; + set_page_private(page, 0); =20 arch_alloc_page(page, order); @@ -1918,9 +1926,9 @@ inline void post_alloc_hook(struct page *page, unsign= ed int order, } =20 static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp= _flags, - unsigned int alloc_flags) + unsigned int alloc_flags, pghint_t *hints) { - post_alloc_hook(page, order, gfp_flags); + post_alloc_hook(page, order, gfp_flags, hints); =20 if (order && (gfp_flags & __GFP_COMP)) prep_compound_page(page, order); @@ -3991,7 +3999,8 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int o= rder, int alloc_flags, page =3D rmqueue(zonelist_zone(ac->preferred_zoneref), zone, order, gfp_mask, alloc_flags, ac->migratetype); if (page) { - prep_new_page(page, order, gfp_mask, alloc_flags); + prep_new_page(page, order, gfp_mask, alloc_flags, + hints); =20 /* * If this is a high-order atomic allocation then check @@ -4227,7 +4236,7 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned= int order, =20 /* Prep a captured page if available */ if (page) - prep_new_page(page, order, gfp_mask, alloc_flags); + prep_new_page(page, order, gfp_mask, alloc_flags, NULL); =20 /* Try get a page from the freelist if available */ if (!page) @@ -5223,7 +5232,7 @@ unsigned long alloc_pages_bulk_noprof(gfp_t gfp, int = preferred_nid, } nr_account++; =20 - prep_new_page(page, 0, gfp, 0); + prep_new_page(page, 0, gfp, 0, NULL); set_page_refcounted(page); page_array[nr_populated++] =3D page; } @@ -6958,7 +6967,7 @@ static void split_free_frozen_pages(struct list_head = *list, gfp_t gfp_mask) list_for_each_entry_safe(page, next, &list[order], lru) { int i; =20 - post_alloc_hook(page, order, gfp_mask); + post_alloc_hook(page, order, gfp_mask, NULL); if (!order) continue; =20 @@ -7164,7 +7173,7 @@ int alloc_contig_frozen_range_noprof(unsigned long st= art, unsigned long end, struct page *head =3D pfn_to_page(start); =20 check_new_pages(head, order); - prep_new_page(head, order, gfp_mask, 0); + prep_new_page(head, order, gfp_mask, 0, NULL); } else { ret =3D -EINVAL; WARN(true, "PFN range: requested [%lu, %lu), allocated [%lu, %lu)\n", --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 C67173A168C for ; Mon, 20 Apr 2026 12:50:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689450; cv=none; b=YA4kNm7ywoLN/Udbl1kOW25PY7yA3WnI8YUlm3K2bhQ3dv1HWTNbnmCAASprLe22EvUng5IKqV/Pv28Zly8sT5EkUkpfGiUhdVoMxg8tZoxmS8pAC9Z7G4xGd6G9ap7/BgTBzbahugUCkbq63MHvuI1AKZPz5GuaFqIRxcg561s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689450; c=relaxed/simple; bh=sSfa5mO+Tuc8WlFhLhsagE6tOSwlDbqV/IGvIAB9fvk=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=c4EdsX3chgtFwSyX6O/2DXFEwV9Y5YeUdUDa6KlFi5cumgTJwyA8Yb3D57pFnUfjG8BOettvLLtt2D0BE6wNoEqiqMLZZ4vdqht0TpsWRBddxptIK3OYWiY0Fqz2zi9OgtBub42Dxbmh0tteDCGecreut/Lj8bW3dqQLgicyZI8= 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=fJEx5iuV; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=d/0KggIB; arc=none smtp.client-ip=170.10.133.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="fJEx5iuV"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="d/0KggIB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689448; 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=H1uMYUyGM2Qrt5nxh6GVo3Jl5MBn378JvNFc5Ca6urQ=; b=fJEx5iuVIJa6EUWILuRMuJZwyNRy+d0JODJASy1zr4GvnDKpjBxvFbafepUlLVwKMqnx6t bFFfvETnD/sNsVMe+/MwLC8epeUy3AgqkLg/83SXdxt+HR/2gyFt/nZFSqBCO1Gk6aBsZx g/BfD4JJs5jGEEVQ+dpPuIQXGsY0E5U= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-482-C3s5wUptNTCgc1Cv_yL41g-1; Mon, 20 Apr 2026 08:50:45 -0400 X-MC-Unique: C3s5wUptNTCgc1Cv_yL41g-1 X-Mimecast-MFC-AGG-ID: C3s5wUptNTCgc1Cv_yL41g_1776689445 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-488d3eec9bcso18917175e9.3 for ; Mon, 20 Apr 2026 05:50:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689444; x=1777294244; 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=H1uMYUyGM2Qrt5nxh6GVo3Jl5MBn378JvNFc5Ca6urQ=; b=d/0KggIBKth3WkWySWlcwIuzd2XmJbu2lHA6G7VZeIy9SRZSkWqxa8fFT6mpUyETHt KYdJSJoZD+CNanG92NNFFvb+qY4tzEdgmEe3CN0LKVuRl+OW5koa8V/yvr+jU2V0YzsT eIVVqJB0bCaLWMG3iqtAnY2ySP/jaDl4IfAYEDXNLzjxFDS66WTyBP6jof2a2FAK0Udj Fh04RN6z6acqX0/ox0l02/l5XOLTKQveYe0FSSt44ku7/brhLJ+4H3v4OTx4yS9dLrkX lOf0xXyRmL7Z2X+KUj3yYmY7MCbH9OPPK1tA4eIdo6iHvjthvdeVQ7FXQwlItUJSMe4g mr1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689444; x=1777294244; 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=H1uMYUyGM2Qrt5nxh6GVo3Jl5MBn378JvNFc5Ca6urQ=; b=JtEDfbnbAxCtLNtJi/wqe+PzfHqt3YHjPuIF/539MFfbqaYqFz9VPDvJO6rcbWGrAv DtBiQ+eIv3mEYJRDSjlFByGZ8PgLPq2PyFGGZZenxSePUjZjzxGtGfj9G/axZO6hjjiH QJZEaXyJ+PzS3MWV2SLt6kPruCy/HnZmbtmYI1A7bkdGujmIorh84MrGtiIjHw1DCYg5 Ja563KNif2gU32GlWqFd7/1LCR/g/swuvFF2AW3RlFuTmXkL/B6BdZIbJX/Egu//BkBR Aqwxa4wXZun55/kN2NLZpRIxdhRxRtJZUrAJ/3cY/X4TQ5V8jAu71dCnU8blOWnBHSwF 9qjw== X-Gm-Message-State: AOJu0YyMKgad5Z2ptKaQkvOI/yH7ZScYRh19vLausIYkBbtLSD8WVoyf DEi73hk8J41CX7H4718NjcDgg4cw/YoyOWWE+1fR2GznPFeY7pj4r8nSGSfi1BB0eJrRgMTzgC/ DWFfRulQFgeiEYsII8k4ta8Kie0b0tF7ooxLtngZu0HIiB8MUUc0nnLoZxpoS3iMNhG+h0FMUmo n0mNtkmA4jPpzZKBFJjeefUmBQ+gROzmjaD3eig7HUDcM= X-Gm-Gg: AeBDies4T3XInLkrHvxrXGz4zIoS2yOWxY3gcSvJ7VV4BG1HFhx5Y2HLokJThrPaSiu WBqa1a6Jek8cvGUjlWAF6z59lA8vndMNwJA7Ib1A2d9PPmJeIpktDhAo+E0GiRYM4t0s9rA39aC r7YjlCTqGHsGBa9Rb/m9AiY4YHuXWNEQHR5wYmz0jVztDN9wJpgOrIpiAq+EFn/GVJeEkPTwqEP NWPlBfFts+RhAqZD5RXUf7hvJOct/Eoeg7Tyo3F31wtxtHoJXE7JT9/3AcAXmY2KEIWeN8w2T/+ Jy5W6K2LUENAwSZ0lFSozkpRUeDfw1icpvZQ/nYtWTDB//irpW9gAKiSRzm1AgQH4TSI20x3A1l BgJxxZLd/h8VdP7Xuxk+hKsMrk6M1GPcp55Ai7PTz+wEYatXyzAJo/w== X-Received: by 2002:a05:600c:1390:b0:483:709e:f238 with SMTP id 5b1f17b1804b1-488fb78ea6fmr191197995e9.29.1776689444305; Mon, 20 Apr 2026 05:50:44 -0700 (PDT) X-Received: by 2002:a05:600c:1390:b0:483:709e:f238 with SMTP id 5b1f17b1804b1-488fb78ea6fmr191197445e9.29.1776689443758; Mon, 20 Apr 2026 05:50:43 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fc0f82bbsm466309085e9.3.2026.04.20.05.50.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:43 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:41 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Muchun Song , Oscar Salvador , Hugh Dickins , Baolin Wang Subject: [PATCH RFC v2 08/18] mm: hugetlb: thread pghint_t through buddy allocation chain Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Thread pghint_t *hints through the hugetlb buddy allocation path: alloc_buddy_frozen_folio -> only_alloc_fresh_hugetlb_folio alloc_buddy_frozen_folio now calls __alloc_frozen_pages_hints() so the reported-page zeroed hint can propagate up. Add pghint_t *hints to alloc_hugetlb_folio_reserve() for the memfd path. Callers that do not need hints pass NULL. No functional change yet: hints are threaded but not acted upon. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- include/linux/hugetlb.h | 6 ++++-- mm/hugetlb.c | 29 ++++++++++++++++++++--------- mm/memfd.c | 2 +- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 65910437be1c..7311ad87add4 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -710,7 +710,8 @@ struct folio *alloc_hugetlb_folio_nodemask(struct hstat= e *h, int preferred_nid, nodemask_t *nmask, gfp_t gfp_mask, bool allow_alloc_fallback); struct folio *alloc_hugetlb_folio_reserve(struct hstate *h, int preferred_= nid, - nodemask_t *nmask, gfp_t gfp_mask); + nodemask_t *nmask, gfp_t gfp_mask, + pghint_t *hints); =20 int hugetlb_add_to_page_cache(struct folio *folio, struct address_space *m= apping, pgoff_t idx); @@ -1124,7 +1125,8 @@ static inline struct folio *alloc_hugetlb_folio(struc= t vm_area_struct *vma, =20 static inline struct folio * alloc_hugetlb_folio_reserve(struct hstate *h, int preferred_nid, - nodemask_t *nmask, gfp_t gfp_mask) + nodemask_t *nmask, gfp_t gfp_mask, + pghint_t *hints) { return NULL; } diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 327eaa4074d3..faa94a114fd4 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1842,7 +1842,8 @@ struct address_space *hugetlb_folio_mapping_lock_writ= e(struct folio *folio) } =20 static struct folio *alloc_buddy_frozen_folio(int order, gfp_t gfp_mask, - int nid, nodemask_t *nmask, nodemask_t *node_alloc_noretry) + int nid, nodemask_t *nmask, nodemask_t *node_alloc_noretry, + pghint_t *hints) { struct folio *folio; bool alloc_try_hard =3D true; @@ -1859,7 +1860,8 @@ static struct folio *alloc_buddy_frozen_folio(int ord= er, gfp_t gfp_mask, if (alloc_try_hard) gfp_mask |=3D __GFP_RETRY_MAYFAIL; =20 - folio =3D (struct folio *)__alloc_frozen_pages(gfp_mask, order, nid, nmas= k); + folio =3D (struct folio *)__alloc_frozen_pages_hints(gfp_mask, order, + nid, nmask, hints); =20 /* * If we did not specify __GFP_RETRY_MAYFAIL, but still got a @@ -1888,11 +1890,14 @@ static struct folio *alloc_buddy_frozen_folio(int o= rder, gfp_t gfp_mask, =20 static struct folio *only_alloc_fresh_hugetlb_folio(struct hstate *h, gfp_t gfp_mask, int nid, nodemask_t *nmask, - nodemask_t *node_alloc_noretry) + nodemask_t *node_alloc_noretry, pghint_t *hints) { struct folio *folio; int order =3D huge_page_order(h); =20 + if (hints) + *hints =3D 0; + if (nid =3D=3D NUMA_NO_NODE) nid =3D numa_mem_id(); =20 @@ -1900,7 +1905,7 @@ static struct folio *only_alloc_fresh_hugetlb_folio(s= truct hstate *h, folio =3D alloc_gigantic_frozen_folio(order, gfp_mask, nid, nmask); else folio =3D alloc_buddy_frozen_folio(order, gfp_mask, nid, nmask, - node_alloc_noretry); + node_alloc_noretry, hints); if (folio) init_new_hugetlb_folio(folio); return folio; @@ -1918,7 +1923,8 @@ static struct folio *alloc_fresh_hugetlb_folio(struct= hstate *h, { struct folio *folio; =20 - folio =3D only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask, NULL); + folio =3D only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask, + NULL, NULL); if (folio) hugetlb_vmemmap_optimize_folio(h, folio); return folio; @@ -1958,7 +1964,8 @@ static struct folio *alloc_pool_huge_folio(struct hst= ate *h, struct folio *folio; =20 folio =3D only_alloc_fresh_hugetlb_folio(h, gfp_mask, node, - nodes_allowed, node_alloc_noretry); + nodes_allowed, node_alloc_noretry, + NULL); if (folio) return folio; } @@ -2231,10 +2238,13 @@ struct folio *alloc_buddy_hugetlb_folio_with_mpol(s= truct hstate *h, } =20 struct folio *alloc_hugetlb_folio_reserve(struct hstate *h, int preferred_= nid, - nodemask_t *nmask, gfp_t gfp_mask) + nodemask_t *nmask, gfp_t gfp_mask, pghint_t *hints) { struct folio *folio; =20 + if (hints) + *hints =3D (pghint_t)0; + spin_lock_irq(&hugetlb_lock); if (!h->resv_huge_pages) { spin_unlock_irq(&hugetlb_lock); @@ -3434,13 +3444,14 @@ static void __init hugetlb_hstate_alloc_pages_oneno= de(struct hstate *h, int nid) gfp_t gfp_mask =3D htlb_alloc_mask(h) | __GFP_THISNODE; =20 folio =3D only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid, - &node_states[N_MEMORY], NULL); + &node_states[N_MEMORY], NULL, NULL); if (!folio && !list_empty(&folio_list) && hugetlb_vmemmap_optimizable_size(h)) { prep_and_add_allocated_folios(h, &folio_list); INIT_LIST_HEAD(&folio_list); folio =3D only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid, - &node_states[N_MEMORY], NULL); + &node_states[N_MEMORY], NULL, + NULL); } if (!folio) break; diff --git a/mm/memfd.c b/mm/memfd.c index 919c2a53eb96..f1c00600e19a 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -93,7 +93,7 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff= _t idx) folio =3D alloc_hugetlb_folio_reserve(h, numa_node_id(), NULL, - gfp_mask); + gfp_mask, NULL); if (folio) { u32 hash; =20 --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 88BB13A16BB for ; Mon, 20 Apr 2026 12:50:50 +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=1776689452; cv=none; b=JwK/9qJLHmTgd+tDOzhCUBh5QaZParJcCYeg4vtoL/BRqdL7A7PfsM+8BbH6hnFGl+FPHks3UkYCKXEzJbILCn/M0py1g5xkHafEsCSmIQ+M2hmsvIK1w0tI0Fc9Xy5QE2X20d8L4aWUR9AounbOVMQbznUsBUgVf7Hrax+7E+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689452; c=relaxed/simple; bh=Iqo+uRjUW8vQWkIcCauoHPwk80gsXmFn7kTaAYxVOHo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=eeNMWYDCSKW7ocfyDQLZyelb+I09+ANzl5qZ9DH+TQS7lVSMRJBqr1aDTGLByXACk2IsjPGpiDt6jMaVeFP6DAjA10+cHga06Rz2pKD4fPORuJ/8FGc8/6cRBti47nAed4hNSVA+ECMhfS4kl+zGYuPQrIJbQij/C+hNWalprvg= 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=dX8tmDHn; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=uCxIIkK1; 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="dX8tmDHn"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="uCxIIkK1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689449; 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=RqSLZ/IXDnoMvKzd+RuDqnZVTelRyZJIHxTKtL1QEDg=; b=dX8tmDHnrOp6lSC4rYJdvzI6fp6NBbYQXIpqSI6KydVGMNZlQWp3FWMac6tquG1XP0oSPd A8wye8hr1mXSAUb5Tg6TOC/cSl4LmcvO2rv6ghiX+QFDomeuN9fJ/JlCImMCii7WmyVKTN Gtkg31ufzuOWHzJfzBk2clT8pJqs9ZM= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-677-6NIh73vQPNetj2zimlNVEA-1; Mon, 20 Apr 2026 08:50:48 -0400 X-MC-Unique: 6NIh73vQPNetj2zimlNVEA-1 X-Mimecast-MFC-AGG-ID: 6NIh73vQPNetj2zimlNVEA_1776689448 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-488c768a9a9so24869145e9.1 for ; Mon, 20 Apr 2026 05:50:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689447; x=1777294247; 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=RqSLZ/IXDnoMvKzd+RuDqnZVTelRyZJIHxTKtL1QEDg=; b=uCxIIkK1Xu8CUsz4hvBHihpV/UxSaKEwRctJRfwFdxFvpT8FMRe7Wyv10f+S4Uh5kZ uF5CoQYo/qNwXKTpTdpG2eFsbBzYDfirfIce9Co6Me3XssM20Tjfet0W69vxfNRcL26N mebEAEpp0AAEKrqKjwT9HbZVgW8A1IBHdcsT9/3RzfPlbwY7H+5MIMVN6sp5kA0r4KWx QgEbJKYVDk+jOrZZWP73eY33YVXyMancGaM0dBh9rAihvotgDxzkLnz+6zO38wkJtaYF A7RJngkxvIcY08NGEq2ZnNJTO2QQDzSkfRK5MWkGAjGVfBttuiyzQLF/hQgJpygD10xB BhJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689447; x=1777294247; 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=RqSLZ/IXDnoMvKzd+RuDqnZVTelRyZJIHxTKtL1QEDg=; b=CPLvG4D1Su+YXN4rJME10RCkGz1HOwkRfniQIM/xuTIcGsyoGZkhTjNTjPxalUxO1m hZe2yEcPPd1vG62TIhfzAW465ZD7n0oQxtJ+kLpZXK6MHqcVbL6hWqH994L4ij21fagQ Laay5ZnSRiaYI9H0LPd5U30GRmTWMo6wEouDcowFLzFpKR/oZf4vFQhR8ngoYRdpBfwA mQi6w/aRSM4espQgmMYcwrXfitGl6FJWvlq1bSQjVKkGdwmVWI1NDYUfB6ED5y7NoM77 7oJWNWrl0untVpOgXyYdrpGYMsuiHaDSPzxyaeMfvKIar3jAOyIqocvAb0LvYouoeRjW S4Fg== X-Gm-Message-State: AOJu0YygRILXu2uTIsg4VymoOZ/Pu/mZ+eGL8ImYzPnO+BhI0anEhDEz Q69l26AdQfQcvH0+v3Lll1KuDXbYmHFzqCf2LU1gi2hckIvXsLdVxL0ByGMDDXLRiRFdNIi9zRH Hih/8MGjaup93G5yI2DKDAX9sfXDg01Oz1SLCRqdFd9YazWxaJeehbIM+qXwGwT8uECxVwB0ITH +noxOhnFqh0Yw5i+uBvorF0lcBXYAwEf5981QYNjvL1ss= X-Gm-Gg: AeBDietjrjEvBEkQJgXRl45O+UKeSu+t2F+14Glyt9T781nuwLUI01Wlu6rCsYVgPaC FoQOCc8fiWYEJ1OECtYULx5D3eA8hDYJwKxQJ+5YMBZxjvkPU3KcO7QOjCDjr1YRdJV5/ibCgTD NaqOMMpHRxruD3x0odGu3w9B51YmPGfMRsu1S9xGEQ9zaq0b6uB1fL4c5JrjCVS7rIL54t+Xf1u JBS4OOxq4rf8HTSY0RAy7DpF6dPd81YR7L5gUP+H8OjH4RkNzL/90LiPbrbtXCaiLZnN8/YT9S6 VaUvrWXmH/RpulWkOt4ouRWuit2XZ3bpVnGd9H0OUPPynAcCFn+GVyakdd+bhd67UWEBsxZYacH VkYYsr9i5GZblT7eivDlAfqVu4SGdq4Nrg2TvC636/TgV0wJrC7ApeQ== X-Received: by 2002:a05:600c:888b:b0:488:c40b:c8bf with SMTP id 5b1f17b1804b1-488fb73d234mr157904255e9.2.1776689447115; Mon, 20 Apr 2026 05:50:47 -0700 (PDT) X-Received: by 2002:a05:600c:888b:b0:488:c40b:c8bf with SMTP id 5b1f17b1804b1-488fb73d234mr157903665e9.2.1776689446452; Mon, 20 Apr 2026 05:50:46 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a4b329542sm43629625e9.3.2026.04.20.05.50.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:46 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:43 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Muchun Song , Oscar Salvador Subject: [PATCH RFC v2 09/18] mm: hugetlb: use PG_zeroed for pool pages, skip redundant zeroing Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Set PG_zeroed on surplus hugetlb pages when buddy-allocated with PGHINT_ZEROED (indicating the page was pre-zeroed by the host). Clear PG_zeroed in free_huge_folio() when a user-mapped page returns to the pool. Check PG_zeroed at fault and fallocate callers to skip redundant folio_zero_user(). Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- fs/hugetlbfs/inode.c | 5 ++++- mm/hugetlb.c | 31 +++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 3f70c47981de..3f9bdb5a7c85 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -828,7 +828,10 @@ static long hugetlbfs_fallocate(struct file *file, int= mode, loff_t offset, error =3D PTR_ERR(folio); goto out; } - folio_zero_user(folio, addr); + if (PageZeroed(&folio->page)) + __ClearPageZeroed(&folio->page); + else + folio_zero_user(folio, addr); __folio_mark_uptodate(folio); error =3D hugetlb_add_to_page_cache(folio, mapping, index); if (unlikely(error)) { diff --git a/mm/hugetlb.c b/mm/hugetlb.c index faa94a114fd4..704ec0817c5e 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1746,6 +1746,8 @@ void free_huge_folio(struct folio *folio) bool restore_reserve; unsigned long flags; =20 + __ClearPageZeroed(&folio->page); + VM_BUG_ON_FOLIO(folio_ref_count(folio), folio); VM_BUG_ON_FOLIO(folio_mapcount(folio), folio); =20 @@ -1919,12 +1921,13 @@ static struct folio *only_alloc_fresh_hugetlb_folio= (struct hstate *h, * pages is zero, and the accounting must be done in the caller. */ static struct folio *alloc_fresh_hugetlb_folio(struct hstate *h, - gfp_t gfp_mask, int nid, nodemask_t *nmask) + gfp_t gfp_mask, int nid, nodemask_t *nmask, + pghint_t *hints) { struct folio *folio; =20 folio =3D only_alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask, - NULL, NULL); + NULL, hints); if (folio) hugetlb_vmemmap_optimize_folio(h, folio); return folio; @@ -2137,6 +2140,7 @@ static struct folio *alloc_surplus_hugetlb_folio(stru= ct hstate *h, gfp_t gfp_mask, int nid, nodemask_t *nmask) { struct folio *folio =3D NULL; + pghint_t hints; =20 if (hstate_is_gigantic_no_runtime(h)) return NULL; @@ -2146,10 +2150,13 @@ static struct folio *alloc_surplus_hugetlb_folio(st= ruct hstate *h, goto out_unlock; spin_unlock_irq(&hugetlb_lock); =20 - folio =3D alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask); + folio =3D alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask, &hints); if (!folio) return NULL; =20 + if (hints & PGHINT_ZEROED) + __SetPageZeroed(&folio->page); + spin_lock_irq(&hugetlb_lock); /* * nr_huge_pages needs to be adjusted within the same lock cycle @@ -2189,7 +2196,7 @@ static struct folio *alloc_migrate_hugetlb_folio(stru= ct hstate *h, gfp_t gfp_mas if (hstate_is_gigantic(h)) return NULL; =20 - folio =3D alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask); + folio =3D alloc_fresh_hugetlb_folio(h, gfp_mask, nid, nmask, NULL); if (!folio) return NULL; =20 @@ -2242,9 +2249,6 @@ struct folio *alloc_hugetlb_folio_reserve(struct hsta= te *h, int preferred_nid, { struct folio *folio; =20 - if (hints) - *hints =3D (pghint_t)0; - spin_lock_irq(&hugetlb_lock); if (!h->resv_huge_pages) { spin_unlock_irq(&hugetlb_lock); @@ -2253,8 +2257,12 @@ struct folio *alloc_hugetlb_folio_reserve(struct hst= ate *h, int preferred_nid, =20 folio =3D dequeue_hugetlb_folio_nodemask(h, gfp_mask, preferred_nid, nmask); - if (folio) + if (folio) { h->resv_huge_pages--; + if (hints) + *hints =3D PageZeroed(&folio->page) ? PGHINT_ZEROED : 0; + __ClearPageZeroed(&folio->page); + } =20 spin_unlock_irq(&hugetlb_lock); return folio; @@ -2748,7 +2756,7 @@ static int alloc_and_dissolve_hugetlb_folio(struct fo= lio *old_folio, spin_unlock_irq(&hugetlb_lock); gfp_mask =3D htlb_alloc_mask(h) | __GFP_THISNODE; new_folio =3D alloc_fresh_hugetlb_folio(h, gfp_mask, - nid, NULL); + nid, NULL, NULL); if (!new_folio) return -ENOMEM; goto retry; @@ -5820,7 +5828,10 @@ static vm_fault_t hugetlb_no_page(struct address_spa= ce *mapping, ret =3D 0; goto out; } - folio_zero_user(folio, vmf->real_address); + if (PageZeroed(&folio->page)) + __ClearPageZeroed(&folio->page); + else + folio_zero_user(folio, vmf->real_address); __folio_mark_uptodate(folio); new_folio =3D true; =20 --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 AB87C3A16B0 for ; Mon, 20 Apr 2026 12:50:54 +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=1776689456; cv=none; b=X5f5V59ojhOT4nOpC3e7yNcJj9b+g4UYOHCeUVB3ZMtdaU/sFboQiKBg3WNyOZnOMIL+DaglFsI+8blL28PNQZx5Kv93UKmQVzeTFweMCH9TXh8MgRRqypbdWaBTjLZvkmsSeMAFPgO0kIa3ChnwWSryn5poKNJa5+mTnTuSsN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689456; c=relaxed/simple; bh=bRdsihvY4zjKId/liig+sN09ZPno0nPTrQN6V1MCrqQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=uzfuEFb22YRoh7AZmJ1EZuOFMrQ64FiHxom/OGkNXJ5BVLbhkOCi7Jfe8Bfr7OvqgQWfsAegm/lQd/ZUeSYYwIdIwuuTM9NDZ4SM6XJJKsx5SjeydjPzlds6+as1mGhCNzriGY6glyUh4+061lsRgNjEdFXGkVB3iuD3ffaaitI= 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=Oj/469f/; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=cvaQrkHJ; 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="Oj/469f/"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="cvaQrkHJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689454; 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=mEMCfIlCf4bqiMJiTJpP/SQ3egOk7/aPzZBRg9jsyO0=; b=Oj/469f/YOrWRQaFxxtRODheMB9uo805ZGKPB6nkatcRWDdiSPR6c6mRnFFZGGdsvL5Qiq jINrHqzXIDQWVSOv+M97zLWPgTdM5bwwyYb5CIPaYb6z9SN2QkD44AbVqOFbOUKB++fQSU zZTP9RudkybQtMRVyjryXt38N3rJm1w= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-43-zTyGySn-N4u1evJFXeV-nw-1; Mon, 20 Apr 2026 08:50:51 -0400 X-MC-Unique: zTyGySn-N4u1evJFXeV-nw-1 X-Mimecast-MFC-AGG-ID: zTyGySn-N4u1evJFXeV-nw_1776689450 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-488c2a4e257so22395145e9.3 for ; Mon, 20 Apr 2026 05:50:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689450; x=1777294250; 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=mEMCfIlCf4bqiMJiTJpP/SQ3egOk7/aPzZBRg9jsyO0=; b=cvaQrkHJfahPqer8xzRhjC7bHKDCksMmECPqnNZmFmxDyiTgCC8QiLUlHumWHx70Az G8fpcpAk0ONSypXLi4JnZcGPx2m5KRo4ILAPlxRYolX5bRu+hwvOcHC5m0ZpVF5YHTu1 hG3PZFWHqpgW+LDGjoe8c00XnDPqMZe8Ci+xha4N0NdFfUmLOUCCg7vcoRI3uxzXSpsM Lg0NOcedxOC8YnsQJlpHg+D+6nfWJX0IUw/Iu6BqqZabXhLyaD+7ku4ApNZ7I52Rqenb lz2Sy3EfSaOHUOiho0UIJ1r/xGbjOI/l7UHYcPPgu0uHNllF/3HNQ6Ez14wX0RigaLFj R+eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689450; x=1777294250; 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=mEMCfIlCf4bqiMJiTJpP/SQ3egOk7/aPzZBRg9jsyO0=; b=os5PWmsuA7892kvC2e9vlmOVErEIZpfreIFBSOCq0HNgydnEhRdjxlR7f+edYhsXJ4 /XYNO9GUe6m0nF+ij6ilJR1+ZkmPofRH9Y54VYXwEq9hAp2pMdMGpqLOFwstLEWitZUd gNo0k4dMDh2E6Yj81puYhxlKKIRdCJGjYnhsLCvCClchklSgRWQq28WxQwGnuPwgwlt8 StLBRElE1VZKmO8uY35iCzaF+52oOpcyI00llYT6SrbqaXPaDrcj10r4krL/hlS8ajHT jyGsmy88a/UP1nT8Sa5NIi92nPLDuEz3fEfE58TaiJs1x4+hlLSMqOkR0iYJff53xjWY Tz4Q== X-Gm-Message-State: AOJu0Yz8HPVUeRjVf2s7pvtZskLaGzfRbjDusg3bGRzypKPabcg/rtAK cCEDe649B9+Eevfqo1/IH8Aw4E4hJpSs9vz6sHTswyyMJuV9kxiFRSnUekA1NBWOI1nMMfO2+HY 4vaqIFtmOqsF4LictUpWMaUC+O9RCe4I9uKv2NVAsnJIoj2Zo70mYab2hyyJdjtfD5u2jgBuCFn 05ZWMUXqZodF4HitlQYCrTHOiXCbjH2YmUql13tN+l6gQ= X-Gm-Gg: AeBDiesJSbQ9VwvMSNN3Wra1DWQUF7Ew+GcWtzoQbWTvgoZuP4oTuhTdAcO/UD5UaV9 hcKOEkwv+XetQfpPXY7nnAkTv+KXo0UiEDx589w1nao4wRcAukN3KSDAKnJN8w/6SCatH3c/ejK zTHbovcfMtaA+svyVoJ1oJuYl8F33nTb8nQKsZOHWm6vFtPo7uTqSFTR8gdqwf+RRf6UCP1H3gc yW6oy4am9x1AQrBiGfoAqUeL6tl7oJk6PiJlK4pDcueh0qttrqODQgCmXMTWHHCi9feVgD/38u/ G+28qHJhkKqJx/bz7soOdDoTeBWHdm45gYQ/pg8EepsvqqvhI/wI7gvrpci5SaGJMosy46EE22J V3gToYsS1Q5aJEc8pAJgzeIZoCO4Xl1vwTHJ0gydHVpYN+fjvVpKoxA== X-Received: by 2002:a05:600c:1f94:b0:489:1c2d:211e with SMTP id 5b1f17b1804b1-4891c2d2213mr56432665e9.5.1776689449965; Mon, 20 Apr 2026 05:50:49 -0700 (PDT) X-Received: by 2002:a05:600c:1f94:b0:489:1c2d:211e with SMTP id 5b1f17b1804b1-4891c2d2213mr56432035e9.5.1776689449374; Mon, 20 Apr 2026 05:50:49 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891c08faffsm149479715e9.1.2026.04.20.05.50.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:48 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:46 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Johannes Weiner , Zi Yan Subject: [PATCH RFC v2 10/18] mm: page_reporting: support host-zeroed reported pages Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a host_zeroes_pages flag to page_reporting_dev_info, allowing drivers to declare that their host zeros reported pages on reclaim. A static key gates the fast path. Set PG_zeroed alongside PageReported in page_reporting_drain() when host_zeroes_pages is enabled, so reported pages are marked as known-zero at reporting time. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- include/linux/page_reporting.h | 3 +++ mm/page_reporting.c | 13 ++++++++++++- mm/page_reporting.h | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/include/linux/page_reporting.h b/include/linux/page_reporting.h index fe648dfa3a7c..10faadfeb4fb 100644 --- a/include/linux/page_reporting.h +++ b/include/linux/page_reporting.h @@ -13,6 +13,9 @@ struct page_reporting_dev_info { int (*report)(struct page_reporting_dev_info *prdev, struct scatterlist *sg, unsigned int nents); =20 + /* If true, host zeros reported pages on reclaim */ + bool host_zeroes_pages; + /* work struct for processing reports */ struct delayed_work work; =20 diff --git a/mm/page_reporting.c b/mm/page_reporting.c index f0042d5743af..5e1e1a924b0c 100644 --- a/mm/page_reporting.c +++ b/mm/page_reporting.c @@ -50,6 +50,8 @@ EXPORT_SYMBOL_GPL(page_reporting_order); #define PAGE_REPORTING_DELAY (2 * HZ) static struct page_reporting_dev_info __rcu *pr_dev_info __read_mostly; =20 +DEFINE_STATIC_KEY_FALSE(page_reporting_host_zeroes); + enum { PAGE_REPORTING_IDLE =3D 0, PAGE_REPORTING_REQUESTED, @@ -129,8 +131,11 @@ page_reporting_drain(struct page_reporting_dev_info *p= rdev, * report on the new larger page when we make our way * up to that higher order. */ - if (PageBuddy(page) && buddy_order(page) =3D=3D order) + if (PageBuddy(page) && buddy_order(page) =3D=3D order) { __SetPageReported(page); + if (page_reporting_host_zeroes_pages()) + __SetPageZeroed(page); + } } while ((sg =3D sg_next(sg))); =20 /* reinitialize scatterlist now that it is empty */ @@ -386,6 +391,9 @@ int page_reporting_register(struct page_reporting_dev_i= nfo *prdev) /* Assign device to allow notifications */ rcu_assign_pointer(pr_dev_info, prdev); =20 + if (prdev->host_zeroes_pages) + static_branch_enable(&page_reporting_host_zeroes); + /* enable page reporting notification */ if (!static_key_enabled(&page_reporting_enabled)) { static_branch_enable(&page_reporting_enabled); @@ -410,6 +418,9 @@ void page_reporting_unregister(struct page_reporting_de= v_info *prdev) =20 /* Flush any existing work, and lock it out */ cancel_delayed_work_sync(&prdev->work); + + if (prdev->host_zeroes_pages) + static_branch_disable(&page_reporting_host_zeroes); } =20 mutex_unlock(&page_reporting_mutex); diff --git a/mm/page_reporting.h b/mm/page_reporting.h index c51dbc228b94..a53ab22f4c49 100644 --- a/mm/page_reporting.h +++ b/mm/page_reporting.h @@ -12,9 +12,15 @@ =20 #ifdef CONFIG_PAGE_REPORTING DECLARE_STATIC_KEY_FALSE(page_reporting_enabled); +DECLARE_STATIC_KEY_FALSE(page_reporting_host_zeroes); extern unsigned int page_reporting_order; void __page_reporting_notify(void); =20 +static inline bool page_reporting_host_zeroes_pages(void) +{ + return static_branch_unlikely(&page_reporting_host_zeroes); +} + static inline bool page_reported(struct page *page) { return static_branch_unlikely(&page_reporting_enabled) && @@ -46,6 +52,11 @@ static inline void page_reporting_notify_free(unsigned i= nt order) #else /* CONFIG_PAGE_REPORTING */ #define page_reported(_page) false =20 +static inline bool page_reporting_host_zeroes_pages(void) +{ + return false; +} + static inline void page_reporting_notify_free(unsigned int order) { } --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 BBCDB3A1E6C for ; Mon, 20 Apr 2026 12:50:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689458; cv=none; b=a7KjWJ+Q6LiWrf2Yumiltrv5wOW8BdwnaZUBZDcwLOKv5X+y58sNacZ8WScuVVaIUNduUCb3ugxmY1j18vfomTy3YvtZZjWla/ggYAOmEWqzu0kY5IF2KC1tiYIpFv5PsR2V/JIcPaSQvwyEXsId7zQh6XFsD5+LvNQA4y28ILA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689458; c=relaxed/simple; bh=DbRu+tF2pO7MxmVyVwdlz+4D60lwlbakGMBh20fbcW8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=UUS0d1PchFvYFkoZGayYXlw+qkj9fMNqXmFYLWtSl1UbrPgGpOsR/2dA+i5rciy1ChRxCXrJdL91GxOV1M/hGE+NlfopkLenu2JbDM2nCIOqGIK/mWiQ/Q241X1Vm0/8noL5kt4jMOq2WDbKPVZGBTBkD8vb/wQqXW4F/iAwAZA= 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=QsbL+G2x; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=TaCSoufL; arc=none smtp.client-ip=170.10.133.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="QsbL+G2x"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="TaCSoufL" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689455; 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=qyYPevVtD446gJgwyEFeHqxZY1ZBEj3WK1MuiedCKFk=; b=QsbL+G2x25KnVRX4smKmuXflKgYQtBnNMtn7U3qAxU+igyug/56ffF0kXThSfgDHkXPPsJ Ik6n+g6qR37kHd2xnPXudUvCaSysA95iKeixzICKBKLc+OkU1e3JU8DAFMkuqViyyIdR6G gWRKEu0i0TCqtU0FKSMdP402w5p57ZA= 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-654-p2oqqAJPOEu6cJS69UHPNA-1; Mon, 20 Apr 2026 08:50:54 -0400 X-MC-Unique: p2oqqAJPOEu6cJS69UHPNA-1 X-Mimecast-MFC-AGG-ID: p2oqqAJPOEu6cJS69UHPNA_1776689453 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4837bfcfe0dso34198205e9.1 for ; Mon, 20 Apr 2026 05:50:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689453; x=1777294253; 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=qyYPevVtD446gJgwyEFeHqxZY1ZBEj3WK1MuiedCKFk=; b=TaCSoufLpDZqrAr9ceX2q0jOkoSFsaCNsPCtVD67Vw13JBg27t7EDm6NjghBmv4wOi YL4LKBElZ6+djaUjm4/7QlTIkMKnRJHRGK45DJ21Ewzv19+9gEtWaYCIqY4cbrX9YZwN Dhymm2MG8IuVtaLIZcFXI/tlnbIVWJekflVN7MPkz+ZtXlxSxbUpAVyZkyj714aetg05 L/F5UlfTztF6/HMquH7PIPj9i6KgzpeOqMgMwfQFV3Ml6C3eZNe1yJZmAmuFgSVNKJnI ana22xQwqavjnZmwMrGXzxVTQRqvNjLY3d9Q6gCzX1AuyEd+HMoN2SODG3pfn7nbNaH0 +JeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689453; x=1777294253; 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=qyYPevVtD446gJgwyEFeHqxZY1ZBEj3WK1MuiedCKFk=; b=qDzCXSirnaCFFa9MQ7zrG/wONMuwZVViqlH5XoHL2dh3oSt8+YfU8A8NPJwpKrxjN2 SZnAsXKDvAQWlyDLxJNZC61nvSUVzLXEpriupXnKLAAA4RvS74JfuPnyd6LO4FG3Olfl TyfyweyVbFQjnB7v/ts+W2Bv9LmrU0zXxJlBkrXrSUnHHKXGJgGSFd0D8WKXrI/Frsx5 xcEIqc9HdHlPk+IJvbllrPmgYMuFgVcfKMf41GhlgtyHEryeKMyF31hNDZmAQAGRq6Qi x2tNSy2jZz6lb6uwLDIDiHBoi59TUaZ14uAV0JvBszzwzcagrzmrrUoIb2xqjHH99jh9 gNJQ== X-Gm-Message-State: AOJu0YyQu1Sn/JbO0QbiW0sNxn4380uuX+NNW1gC4kOvnAWsoBgvQ7NB 9IK+VtprdErFW7o6qKqZQwySsszi+MpCQPb7HG/mfvgOJIK0bunzmHXqETGVf4mCgzZt7IqyzNI XJ8TZu/ftzy3Lx/qha6io3fj23nnhOg2hoGRL5GvCWmMZlPBrVZ2vs8ZmFe76WZMfPQEEi8RHU3 fVWAtA/cZAHEA2S6eUJMp8vbLaLTZl4hStuzhCcAoKy+o= X-Gm-Gg: AeBDiesI4e15gB/NqpR4U09s1KzIG6hjbcYwtPS9DXWEb4zBq6+oP4JePTjIORpyEtX k+tHMdSCSfuKotSbwCiuWs19MpQNOaEnXU6tI9JlcLiX1d4Dmn0XBVyjqKXO0RbngDyDt3QOt7r RoeCn4Tf9Ywv28ZfA8ELwxEJCSLdt6ZP43mkio885+6E+GbkTLYYdWpvTSqQ+GY9lJaqYLN+zh0 uic100iHKznYl1BvbwJkj4RlQn3G8A4UOI8J5+kaPXraeS2PQge6PVcAXHzkt8kKkTupz73uZTs VbkgloKYT1rLmePta0i/1uRnhmSY3AvBED2IKWTICAwN35nqoAgZlMkLeIjtuTFEUNP1jskzKSw /DSpcEfWN7krT85pUd5qdMHpa7qdw7e4TkQIcidFqo8razUbNGSBx3w== X-Received: by 2002:a05:600c:c4a5:b0:489:96e8:1ef0 with SMTP id 5b1f17b1804b1-48996e8200amr30131625e9.30.1776689453039; Mon, 20 Apr 2026 05:50:53 -0700 (PDT) X-Received: by 2002:a05:600c:c4a5:b0:489:96e8:1ef0 with SMTP id 5b1f17b1804b1-48996e8200amr30130895e9.30.1776689452402; Mon, 20 Apr 2026 05:50:52 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4890009e759sm216401175e9.6.2026.04.20.05.50.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:52 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:49 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport Subject: [PATCH RFC v2 11/18] mm: skip zeroing in vma_alloc_zeroed_movable_folio for pre-zeroed pages Message-ID: <39c3c8e647fc4c8e3dcb5c9d12f2e29b5404e8f2.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vma_alloc_folio_hints() and check PGHINT_ZEROED to skip clear_user_highpage() when the page is already zeroed. On x86, vma_alloc_zeroed_movable_folio is overridden by a macro that uses __GFP_ZERO directly, so this change has no effect there. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- include/linux/highmem.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/highmem.h b/include/linux/highmem.h index af03db851a1d..8bb67772c1cb 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -321,9 +321,11 @@ struct folio *vma_alloc_zeroed_movable_folio(struct vm= _area_struct *vma, unsigned long vaddr) { struct folio *folio; + pghint_t hints; =20 - folio =3D vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma, vaddr); - if (folio && user_alloc_needs_zeroing()) + folio =3D vma_alloc_folio_hints(GFP_HIGHUSER_MOVABLE, 0, vma, vaddr, + &hints); + if (folio && user_alloc_needs_zeroing() && !(hints & PGHINT_ZEROED)) clear_user_highpage(&folio->page, vaddr); =20 return folio; --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 995CC3A2544 for ; Mon, 20 Apr 2026 12:51:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689462; cv=none; b=cpdBBD4xCdByaiuhY1+H4ucTmuiSeVFkAaVC5Ot22Qtj7bKv9kqhpALU1yUaLGSryPGEqDhye0kQYoC2q00o0u92wNL+G4e90Gw6uF5GsrbylqEz0PvCesuihv67e8jFy5NrJZA4LR+FkR9qMp41JuAeEHvuA+bV0bYSxVd+CLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689462; c=relaxed/simple; bh=50XETUs8nc1ubnBZr+gLHXgVLxsEJaZTcPzbBRhZBJ4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ke0A3XVCh0mjf+pV/NQplQ8aU7xwcMXcGlp5NgPd63PU7iaxftx7RpRlA/kBv4+RRx6j8mC1WUV6nJbtxKxMyR0T+NzgeEqAuPJMKjsAc27b8qilAZHhGiHPIUF2UfsyOkS0yi38vAa12XEYZfgokxb30JSieGuGrgYrCJZ6SuA= 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=SwpX4YwD; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=LE2JchCr; arc=none smtp.client-ip=170.10.133.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="SwpX4YwD"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="LE2JchCr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689459; 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=gARj7YpNrf8B3cZamzB8laaN+/4Ge9ZNHV4aaUa3toY=; b=SwpX4YwDbeYZLnzI9vIwis0TzBiB8ohoczvUrZa1ZBKfvEinxLM59DR5rAZV9lrBQq3GTG jVhg31sGNAMM/1kgwJzYsSrw+Mdx5L4zoWKgAWyyhQwTUmD/ewIniZ1RfofU/JL0+CQpV6 64XPZKqduqXtOkY+KIh1UYorQqYHNRA= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-696-5DsH_vP2MHyKRkG4dB43Ag-1; Mon, 20 Apr 2026 08:50:58 -0400 X-MC-Unique: 5DsH_vP2MHyKRkG4dB43Ag-1 X-Mimecast-MFC-AGG-ID: 5DsH_vP2MHyKRkG4dB43Ag_1776689456 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-48378df3469so19271585e9.1 for ; Mon, 20 Apr 2026 05:50:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689456; x=1777294256; 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=gARj7YpNrf8B3cZamzB8laaN+/4Ge9ZNHV4aaUa3toY=; b=LE2JchCr5DTXbJ4uVIG2XXonOjQkHGE+PQ66ep+AQJ2QdYq7pb1uTOgEefiSv5Trm6 EYPrHm/mvmOQSq6hXATLOEjPP1eoHCXRsmaejF5HypZsAI9KaTDnaOwq88xrLytJm/5y 7E6Yf17mxffk1r5gL0WOqHkMxHW3Pk0Es7lEvfxc4wQL0ov+Jz8PSNrZYzDHdtraktlw gPyz9otP5n/17eb7b5FNCdvysfmiIEhu7YrhrSu+ImKK+qt/prR9MNVSW80Ocw1ZLrfy qFEb/nvE/F1oU6s9tPzmaD7Z1/L0aB3D6tMBMkS7ATDIBKqWdrmfGyFetD8HkV+yhXuq LeiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689456; x=1777294256; 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=gARj7YpNrf8B3cZamzB8laaN+/4Ge9ZNHV4aaUa3toY=; b=KIEAt9oTQUsGHUEm2SHb9XgkyWgRgvBEVHNFzUSbKE3MRWGXMItjdUQiaoGmkp6bd/ bNJtmtZLC+s3N4+nQ38cjYrmpXhgp93YgFly0PqruXYKWJJ5lxiUnfFxXkGvHgAwt87N B+gq0KPXa3Q0OxccsrgRVwiht4rUSGQnIQjvdAtAd69vZpFKnqoAWL/vA3Kd7MRSlDFa SnFqtAxTcI04q2O3Qv3/r26UfVHORYjzZc4B/uKmdDit32QfbuifqwYANz7TwwPfnxW6 Oa1zBZCA7OE8WNvJZFUmouY5JW1UNSBGC4peUTV5hUcCezn7DwE1LrPP8Y2GFTJtOajU //Og== X-Gm-Message-State: AOJu0YzMxL5GxJt7WWKy9jn5Da6QbPRAGhOAXSRlwk4ZnLNOVCAOFWuJ 2/QvE8LkZzt8Hfoq0O8oQ2E298XhCgPj8b2I83VXAcjYTtc7bli3i+ZuJyNC1/kNAgbUjJdYzqC Q0wI0BIc/QOcIKwhAnKw0Py6VH9Kd3L2f5uVYR7GAsJm6J4I2bP0rqUANZHEPwGLGjxocEDpHyA WQNC1fjW0NqvgGPS1mvfri41fiukx+tpi5vl64kK9zYng= X-Gm-Gg: AeBDietijdOA+jZ/8XRv6f+z5wXS1KGUnt4gy0rF1oSvvAnXxulOyNL0Zb44P2HsfYX 9I/j/d22HjcS+5hCsMASmkO7PbPO2j8WKw2+9TivUcg/8FvHa0JhHKkJcBlde9vFL3mneJMy3yP kxKKkJKcJsUhZBV5vNvW2y6M3/i+MAlhmTT0TX4nQSUiwoam5bkAmGHC97nx22pFnGm+OfYz8Pr udvBeCD1gMxLZsM5kS4sbVwYdyqI0q/msAWIOLLEGxtn2+tee82cE+UOQ7uF0sk0WU+OOA4e8jy zb4S1BAqOGxlkyq96r86TEWTJScesWVl8xKnuli601ejMwbkU7zSlmZfmCxZLuSaU2u62MkPyCZ H3CFHYJPj/yGyWaI3nvmgvWeMQRGHB3daEY8antzs5i1cJFwySXMTWA== X-Received: by 2002:a05:600c:3ba0:b0:486:faa8:9e4 with SMTP id 5b1f17b1804b1-488fb8b91a7mr175260505e9.12.1776689455621; Mon, 20 Apr 2026 05:50:55 -0700 (PDT) X-Received: by 2002:a05:600c:3ba0:b0:486:faa8:9e4 with SMTP id 5b1f17b1804b1-488fb8b91a7mr175259925e9.12.1776689455049; Mon, 20 Apr 2026 05:50:55 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891c320084sm125739585e9.2.2026.04.20.05.50.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:54 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:52 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport Subject: [PATCH RFC v2 12/18] mm: skip zeroing in alloc_anon_folio for pre-zeroed pages Message-ID: <97780c54dc083b9e3e0bfb4bb9ed7d8b1a576f91.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vma_alloc_folio_hints() and check PGHINT_ZEROED to skip folio_zero_user() in the mTHP anonymous page allocation path when the page is already zeroed. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/memory.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index c65e82c86fed..066e2c9781dc 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5179,8 +5179,10 @@ static struct folio *alloc_anon_folio(struct vm_faul= t *vmf) /* Try allocating the highest of the remaining orders. */ gfp =3D vma_thp_gfp_mask(vma); while (orders) { + pghint_t hints; + addr =3D ALIGN_DOWN(vmf->address, PAGE_SIZE << order); - folio =3D vma_alloc_folio(gfp, order, vma, addr); + folio =3D vma_alloc_folio_hints(gfp, order, vma, addr, &hints); if (folio) { if (mem_cgroup_charge(folio, vma->vm_mm, gfp)) { count_mthp_stat(order, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE); @@ -5188,14 +5190,8 @@ static struct folio *alloc_anon_folio(struct vm_faul= t *vmf) goto next; } folio_throttle_swaprate(folio, gfp); - /* - * When a folio is not zeroed during allocation - * (__GFP_ZERO not used) or user folios require special - * handling, folio_zero_user() is used to make sure - * that the page corresponding to the faulting address - * will be hot in the cache after zeroing. - */ - if (user_alloc_needs_zeroing()) + if (user_alloc_needs_zeroing() && + !(hints & PGHINT_ZEROED)) folio_zero_user(folio, vmf->address); return folio; } --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 869363A1680 for ; Mon, 20 Apr 2026 12:51:02 +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=1776689463; cv=none; b=W01x3Yc4WKTvD0yW6D6ZaSxE6bGOqEVvdWkdHyKmEqj2OFq+3bjXEIDCn5rR0SowBxMCvXBIxzOvMj+NsGGu2Xo8MXAHxe6NE9r7/HAH4gGpKjLNUyUBYqN5m/RpYZKVtZkiD1HUwQYE86bWMFyHYawLWbTOMWzlaHZ82GrPNLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689463; c=relaxed/simple; bh=ql8e9Lky0a/Rf32U0epNADUsxCMgGk+QrdwhemywB2U=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=NjzILnN4spoUcSKz9IOtKhm2tkBZO9Apc+uzt63DzyjbrUq+mf5lM1y6Nz9IDyOo9i3s9nxMDu0kTNzcTzuMfTcMW6p4DkK8yknCrPUPUPfJBhIKR76YeCwpXVKbmeXgbC4plbpHH6TzFqNofmp0Ap0cHC9R4/wRle+8ityqvOY= 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=g6qczxgT; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=sKB3IyZl; 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="g6qczxgT"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="sKB3IyZl" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689461; 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=WG7QrmBRTIxkiVXS8Xfp7FbXBMDCD9dVlS0gg72QVn4=; b=g6qczxgT/5Sr60NHgc3lg4q3VjKY+4QHC850QCWg/qabgYotOViQJq3W5P8W0Giud9zJn0 MMISMXUx+ImbCENfCaVZSyfKWAL34cRMHtvgQEm9c0Mk6xkbMYVsl9wPD+UOZQtgXUIS5j PQ93b44hL8ugzDR/8V3GgwJtcwXAFx8= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-455-P0Ikcq6EMZyEKiX_yHm1dg-1; Mon, 20 Apr 2026 08:51:00 -0400 X-MC-Unique: P0Ikcq6EMZyEKiX_yHm1dg-1 X-Mimecast-MFC-AGG-ID: P0Ikcq6EMZyEKiX_yHm1dg_1776689459 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-43d70c27214so2248537f8f.3 for ; Mon, 20 Apr 2026 05:51:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689459; x=1777294259; 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=WG7QrmBRTIxkiVXS8Xfp7FbXBMDCD9dVlS0gg72QVn4=; b=sKB3IyZl3Yp5/cxP9oMAfDhgKIVw8io/OEVEA8lth4dcxsO6iEfCgLofNVpiwFqGYm FAwcRnavBzrQCVrqHSk8HIG4XpY1UuB9X+aKrdgL6M46bb5EuRUatPvc2thZZhZ+isrk 8PFXPdrJe5t3LBQ8KdfYn/Hq+tnJ7HCXBa/milogGiwyN/ctfk+KRAA9ctK4liWd7emd Kz6ic6kTpxYmr8uRvp2bvxgfPP2Egm3GnQMDeQHUWTWtv/b8HjDMoXIZQam/vUVA0LnR DqS84jZB2kQLvwIzScZ7/F8PLPWZy1cSBfHjBEpf+amAqKWBIo8U7ft9YTjpimi3IJet NO6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689459; x=1777294259; 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=WG7QrmBRTIxkiVXS8Xfp7FbXBMDCD9dVlS0gg72QVn4=; b=FhJv1b+fGf7D56paQpXVeLXoQORNWJCeAGxHYA8Nq9nuN1MZqwUVsbkTtGXO+q/SJX 3vZjU8bUA/KqArN5nldpgV5mHISuyVDww0tIm3XTCfBZQuOPm+wMWYoD+yu5mtLiFcv3 NOwPvugQhz8Qze9zp4z2qfYaFVC9evovRhLDdqDoJ9rrh+knZwL4rTmz3JU8zDBAYSjv lGw5AzC/XDW3h7kkQbI+5irryU8UGDcfNyIT7IzGhcq5XSQgSedT1T9FW+A3yjqz3Omv WSCxS1VqlvP5m7oG7qtEJOYUFLGZdWxzbeWUqiNyu3TN4PZN0uyPr+y57m+NJumHCS/f I0YQ== X-Gm-Message-State: AOJu0Ywn57tsKdvuZaLJA4rG+KVFYbT6NTeFhbWSDNCyBnltc340KGc5 djG+RjYzfv9NQyEq15AX+UExNdXi3xIpNj3MbaTcXW5XsPN1Lyln5eFxRWY6Sd1f5ZPVtJiNk4X 513PAExTwA5lhPvh/TxnY9DXw/ows+xyqJaGVn3VhWS8mRAG00PWLzuO9/8mp8Ar1MTajdW6vH4 H+qsBpGgnj0wr3Dw7+VDwpSFa7QLmcKHOdbl1NoT7rGug= X-Gm-Gg: AeBDieseeuJazGxOuOemNEeDyhTcKJKtTKKTVCIYe6MFgNUVOwCcuIH30mpRt1lUJpz wOH/2ItZdpPis5tpxa1Kzk9Bdjc/8KWEU/3Ef1CQvlRVngQPBrXWfuiP+KiA3remyCZyM0PT0sg BzvGmDs4xWKZTGhh8nxfYtXR/30wc73Nr6qfeQSMLLQEZ/hpeqs4kTWSjhoZ97rDLE4Kb+wOvjh 3pPQZAKMFD0yO2PhLpwltLPxwLvPoUmhLTCZUHcd7/FD5p5q4MT+Z0kYlCC8dvX4a86Y3vUuBl8 VuQ92cnMgz8YUFaxJX3vRavtWSX6u28fNtw6CI+5gEkJnBMHM8fF4sX+fDV3YXfI3534NqKPvsJ rh3f1t2pW3a2VmQ2pdVEumejVtxdsHCRx2QFBc6M91gdA3hPk6oYDhA== X-Received: by 2002:a05:6000:184d:b0:43d:e31:68d1 with SMTP id ffacd0b85a97d-43fe3dd958amr21385907f8f.21.1776689458963; Mon, 20 Apr 2026 05:50:58 -0700 (PDT) X-Received: by 2002:a05:6000:184d:b0:43d:e31:68d1 with SMTP id ffacd0b85a97d-43fe3dd958amr21385818f8f.21.1776689458282; Mon, 20 Apr 2026 05:50:58 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e4daf2sm28270624f8f.33.2026.04.20.05.50.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:50:57 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:55 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Lorenzo Stoakes , Zi Yan , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang Subject: [PATCH RFC v2 13/18] mm: skip zeroing in vma_alloc_anon_folio_pmd for pre-zeroed pages Message-ID: <551567632643dc1b5cdf08284039aeba0b296b6d.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use vma_alloc_folio_hints() and check PGHINT_ZEROED to skip folio_zero_user() in the PMD THP anonymous page allocation path when the page is already zeroed. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/huge_memory.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index b298cba853ab..243592452ead 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1259,8 +1259,10 @@ static struct folio *vma_alloc_anon_folio_pmd(struct= vm_area_struct *vma, gfp_t gfp =3D vma_thp_gfp_mask(vma); const int order =3D HPAGE_PMD_ORDER; struct folio *folio; + pghint_t hints; =20 - folio =3D vma_alloc_folio(gfp, order, vma, addr & HPAGE_PMD_MASK); + folio =3D vma_alloc_folio_hints(gfp, order, vma, addr & HPAGE_PMD_MASK, + &hints); =20 if (unlikely(!folio)) { count_vm_event(THP_FAULT_FALLBACK); @@ -1279,13 +1281,7 @@ static struct folio *vma_alloc_anon_folio_pmd(struct= vm_area_struct *vma, } folio_throttle_swaprate(folio, gfp); =20 - /* - * When a folio is not zeroed during allocation (__GFP_ZERO not used) - * or user folios require special handling, folio_zero_user() is used to - * make sure that the page corresponding to the faulting address will be - * hot in the cache after zeroing. - */ - if (user_alloc_needs_zeroing()) + if (user_alloc_needs_zeroing() && !(hints & PGHINT_ZEROED)) folio_zero_user(folio, addr); /* * The memory barrier inside __folio_mark_uptodate makes sure that --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 5BADB3A3827 for ; Mon, 20 Apr 2026 12:51:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689466; cv=none; b=lpjS+0fo3RBDEYOseH57kGlMN3nVIdmXUn4pqgAOVuqxV1dlg0HmYxG5S+rjgFovxaEI/x6nnrB3SeTcginQlMIKmjlMYJbVeEIjZ0eg7bCN+URQjTUkJgAXZ7AgT7yB5sOvJw9jLFq+3m1oHpi+r6tvYxtvwoXii1QDLhgmh6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689466; c=relaxed/simple; bh=99DTJv3X+yGf9/H7JcrqKkUagGBqOu5zdakUYlSmk0w=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=n6V/0A9sjJqtcS8Fiih5c9mDwBiO2ew/YbLL0r1j86SMuqpz5iYBLMjPOkJMJ2UGX0DfRs1DXeH/6NRQOTAKFLgp3D2BM9H8B3/oGqF/95AgEGOn/SIe6PbY8eda5fXMvVcEZLKVNhmlj7zlbQljYVvywcTWs9yCuDsmFgetHm8= 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=YiNQSON/; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=eOgZAzZz; arc=none smtp.client-ip=170.10.133.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="YiNQSON/"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="eOgZAzZz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689464; 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=qAGKc42yexqH1EWWUAUEJrDKNbSbrVhgetE1tPIVhxk=; b=YiNQSON/8g87eryTeEMV5boZNvDQ4wLJJnMCCbXmvA2e7/T8Jz0KnRh6PjKyXgOkwX3aXc D6FPwSCxdjcyIXaD42Tqsf83dxV2TUmN51c4mzu8dkg3PP7u2npaqZfDbZIq9gQ+RriQDa hEND9dGdjgWJ5o6BLnb5bXnCkwoD8w0= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-456-3CXhwTKTPDq-u9HIjaikJA-1; Mon, 20 Apr 2026 08:51:03 -0400 X-MC-Unique: 3CXhwTKTPDq-u9HIjaikJA-1 X-Mimecast-MFC-AGG-ID: 3CXhwTKTPDq-u9HIjaikJA_1776689462 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-488c2a4e257so22396525e9.3 for ; Mon, 20 Apr 2026 05:51:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689462; x=1777294262; 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=qAGKc42yexqH1EWWUAUEJrDKNbSbrVhgetE1tPIVhxk=; b=eOgZAzZzVQ91k/Ba8mDqKuTBNEw7Ax9T4kF75+p51vlk1bb7Cszlhr3jI/hQKu0o5d 9hyLAXd+fqyMWgb2TP9nExZMXzuaNkjkJf9nml/ztSV9lZQr9ipzp25XRhcHrYb0yzL8 k61UoV9kliwHnsjZHPUPNMJyl1/UKi5mn0/ILTyyDjtAD12zFpmdb9zaFy/I+aI8ZEgG tKyHlSRM0Mmp0yjVSK2KK0gEYdWzI7XKlX3pxsAAPprKx0OFhBwxLFhFAfnhNpK9ubT6 OQN5i341PUir4NxstXs9sLi8Zr9Pfjl2jpsobyew7CR8BTunQ4yH9bG5ov1mAY4W590j v9Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689462; x=1777294262; 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=qAGKc42yexqH1EWWUAUEJrDKNbSbrVhgetE1tPIVhxk=; b=F7JdxHE1O1cOFO5d3hzBUcb/luYyuuzjgpU/0yFRkvpr+MlZs8b5CmBRwj73vM8jyb vmqMo1pCN+G0E3+rl3IBDfvnZsgR/c05muQfcsYJF9duuprmkxHwYM9+p/cWFSGkCMRi h/nw7gCPPq9zJIZFK3YQsz9s4HTJaTZcHbEDxfkZVkTZYzqISEGPbgQlOovDq66ylHxF hP4o6HtEXnlhbpr8cewAUH+N9YOioP6zBJEhsQ2PyG3ELKa9bqI2vDteqWIsM+Q8d/Kb cvHW9U+vSuqOWQC36SukL3HvnGTSfKtw2GxmK9ourNmxpKhFXfRyCp6Z8sjPu02TLwLK cq2w== X-Gm-Message-State: AOJu0Yxc1kIlFfcqkrsllwcZliZMjBnEsYaqXch+5NUSI/5XsXbaU5Pf EXVhfOeJwUAGTG5ndANHxZ/3eAFjgVJzY4gDM8bqOCSbQbjQLArtjw4awSJrcWeaepocsiwD7xJ WNuz/AbmYYTheguZhd+b9uv6qyRGIqYEaehgNYzvdFvkdzJZJqHt9nhNQQU1pPle0KSffuu6ulS LtcjSGR23R8UzKefPiN2n8qbUtDs8bjta/CZ4o97hwryU= X-Gm-Gg: AeBDievatQgKRHYKlJNNkBzjteFHqkbhz5+XZdW4/rWGClz5vL/WHmH/5aBtKE7Nh9P I2W3XAoiYE9I5AxGm8iM7uDUfKUy/SjaMjZ+JQpqUnRWG2tSxbGT+CuPAUYssfkE8d17f0ipMlM nVJQR9fy/I2x6t/law9fcVAYilb81x/NZk2+eSIQTSVs4+VECsfcE42597mybhFOoJJok6NAM9h EMQF9Ie3dzE0Wxtg9GvxOgf6mnMdaf0hwIFywHpb+pV4fy2tB5AwX2FrUl8/ezWY+xbovoN6WYn Ull6CmKScJP/nT1CdSHlRG7Ia1V/zRiCxshMhhVWWBq4kXF6f+Imu7PycE1t+tpFQa4swInndrp AJcOaEjpswCW4ge7a599SlJt/HROg1w3uAYw/ldVmPxKKNOqBXjcZmA== X-Received: by 2002:a05:600c:a00f:b0:486:fe83:8621 with SMTP id 5b1f17b1804b1-488fb788924mr200859625e9.23.1776689461629; Mon, 20 Apr 2026 05:51:01 -0700 (PDT) X-Received: by 2002:a05:600c:a00f:b0:486:fe83:8621 with SMTP id 5b1f17b1804b1-488fb788924mr200858775e9.23.1776689460975; Mon, 20 Apr 2026 05:51:00 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fb735d3dsm184142605e9.2.2026.04.20.05.50.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:51:00 -0700 (PDT) Date: Mon, 20 Apr 2026 08:50:58 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Hugh Dickins , Baolin Wang Subject: [PATCH RFC v2 14/18] mm: memfd: skip zeroing for pre-zeroed hugetlb pages Message-ID: <03405f0008afd371021e98a985490dce7fab6e7d.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the pghint_t output from alloc_hugetlb_folio_reserve() to skip folio_zero_user() when the page is already zeroed. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/memfd.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mm/memfd.c b/mm/memfd.c index f1c00600e19a..546149897369 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -81,6 +81,7 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff= _t idx) struct hstate *h =3D hstate_file(memfd); int err =3D -ENOMEM; long nr_resv; + pghint_t hints; =20 gfp_mask =3D htlb_alloc_mask(h); gfp_mask &=3D ~(__GFP_HIGHMEM | __GFP_MOVABLE); @@ -93,17 +94,12 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgo= ff_t idx) folio =3D alloc_hugetlb_folio_reserve(h, numa_node_id(), NULL, - gfp_mask, NULL); + gfp_mask, &hints); if (folio) { u32 hash; =20 - /* - * Zero the folio to prevent information leaks to userspace. - * Use folio_zero_user() which is optimized for huge/gigantic - * pages. Pass 0 as addr_hint since this is not a faulting path - * and we don't have a user virtual address yet. - */ - folio_zero_user(folio, 0); + if (!(hints & PGHINT_ZEROED)) + folio_zero_user(folio, 0); =20 /* * Mark the folio uptodate before adding to page cache, --=20 MST From nobody Thu Jun 18 07:54:19 2026 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 C8DC93A3E7C for ; Mon, 20 Apr 2026 12:51:08 +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=1776689470; cv=none; b=P8bqiaRzgvbjvSswprlqDClKhRn3ARtwib6L8N9fWnN6Prd6FDjKCv73t5pTBeDFsYdtcL/ZkAJFLv4dyjTupF3v2+vAaRdN+XAO93uZkx6wU3qSj+xwcxjpvnjHGhOVletN4KAMZh8oNh6nZ+++3J7oRcgxN5iVwkYhDHgtDEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689470; c=relaxed/simple; bh=AZKQuPir2M6D9nuVJhXEkkcoZRJ4ZuK7KdkVVibbYjs=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=hi+2zqL9ejwwtPtClUJFvF/K6hP/DwHpdlvIe+Ivo0CwTTS0y5rn0hGiz7mxnln0HlEhRa0FQw/mrIRC/bsta6T++FyLm9cxtctrFR3tDWqaz/LPIGZBAsqgdlNNdol4hFC7FgJvQLJsHexZuKuWod0jVTbpb/fNvCDt/SkR0Dg= 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=IRxf3kpC; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Kds7MWNb; 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="IRxf3kpC"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Kds7MWNb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689468; 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=tQ3NH90R6jD51b/2nlDfTNF+z8a8ZXOca/8W5MzOPpI=; b=IRxf3kpC5eh5K/2DRkzb6cZD0cDaIqe0HKsiL4aTPH8lXQsJYu3TBV33tfLgjv319KJmEO D7KbQBzLpP5MZxSY+ov+NMsr3FqY7nOdWJIMcXH/6tnsa9cT8Gyjy787RQz+KNw2lMPFF4 ohRKCGoFdw0bDBTFZU54rF7z1oM1nx8= 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-351-igdjPvjuOG6XNip2LbtjnA-1; Mon, 20 Apr 2026 08:51:07 -0400 X-MC-Unique: igdjPvjuOG6XNip2LbtjnA-1 X-Mimecast-MFC-AGG-ID: igdjPvjuOG6XNip2LbtjnA_1776689465 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-488bd1ee9e7so21560995e9.1 for ; Mon, 20 Apr 2026 05:51:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689464; x=1777294264; 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=tQ3NH90R6jD51b/2nlDfTNF+z8a8ZXOca/8W5MzOPpI=; b=Kds7MWNbhyg4fvN4fI4B+bBfzy4+FsiKkRqJaxnhe3yrpBObLVnTBQ1XdaeGqgIYAY YK/j4MdNJvvjfzlmMEMac76vvX4rjvLkW42wYSpvuKbgP5iH+7H8JT2ZKGr0Et8F3sT3 7ToI3dknzTTyou/cIpCoJUjFWvCNYSJ8HWtREmBGsiSObwYfefIiWNDIIeiB9x8l6hb7 BMPAyeGrNvujxyG/z5ERCtazCLX9a/fP0rFAuIy2fcNoOd8PM6O1wJawF2os5a6aFfE2 MhjdTEhJK/Onqz+S2ruKRD4IroSOR3I4j4v8fqVYJh2YXOx1JpoOCPH58m57uEB5kg4a zxUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689464; x=1777294264; 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=tQ3NH90R6jD51b/2nlDfTNF+z8a8ZXOca/8W5MzOPpI=; b=kNdcqd1XN5vXh+vT6bfLX3+9YK8q+9NzEt8dCaXxBl220dm+CXNVtOH58sBsmqtsyq ZdCEII50tZs00LfHe/0iBf439G2D7yOLJyjP6qGLahGrftc5XM4qTalw8rMTRN4Cu4x8 G/TwLD2K0Oz3yvsvofhSJaMI1o9p4cEtFbwAK2JU1LAIfrJIPdpl4bDwxmDIP2VgQSA1 1B0z0AIKs5sJp6jyhQF2EzcTRkQlB+XGhDyqN21Z2P3bhKoxchB7BL0mnrSwwQOWNwiv Ts+2wPtwflQPsj7crASaRQcgQMaRyv6+T/lvC5G8JhcJoFTphj6yvjnryKJ7CB2k6xfX 4WSg== X-Gm-Message-State: AOJu0YyA/4T+wWcHRS4jcAPSEAzH36tCikitq5POWCjWXsPw6RJebzN7 vQgrDBkdr3nfjLExRBqhNvtDdVI2DWOhbYb+VUGc17h7fzU6xrb5uwEVvF8axKweud/nWqY0Ton brvuuGm6tYsuk3Ugp1YpgxRzEtpOHhqi+uYQZb9Pyi1SbdWVUbJN+/bfr2ch3gdZnGsF4ll5PJB 1fltzn8Eu1oW2DoZwnyHkycbO0u6fWyC+m9kYcv8TyzDQ= X-Gm-Gg: AeBDievGeAwTi+ivvOUj/gd4PW1GwFp4DSBoyuaPLDCo65DFC8FbC/JJGW0stS9WpHH uTStf7dzfB3NCOz1mcFidd7LRPeUc7Y+tBGiQZw9Ez90mZkkB6qmyd1HiIO1vlEWDTsQ+aaVeRr XZLMHbwqQn0Igq9Md5SgggTcmmbRHr1qu6BfL2qilnEm+o8Ri4XrImCBqQxLqRNEKecUMZQye3k nbQaI4iBS6YslAz7zDloOSYKeXgwRlgEJv1/BWlUQEmOU3TID/aKoXogW2afRpH/rrh7cvuCBgS Le9MPAH/lsegM5LwcEFP6Tl37hMLWXE9boWhuzjzkepgZjtTFFMImf/oj0g2cFamFNlXNFczNAM nkA+IFPeWJ0L85KVflzkBAl+Ym4a+je4kXO2Q0m5vmU5ox04wju/ofA== X-Received: by 2002:a05:600c:3546:b0:488:81b1:ae36 with SMTP id 5b1f17b1804b1-488fb7880camr196781265e9.23.1776689464298; Mon, 20 Apr 2026 05:51:04 -0700 (PDT) X-Received: by 2002:a05:600c:3546:b0:488:81b1:ae36 with SMTP id 5b1f17b1804b1-488fb7880camr196780585e9.23.1776689463650; Mon, 20 Apr 2026 05:51:03 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-489393ddd69sm12665675e9.10.2026.04.20.05.51.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:51:03 -0700 (PDT) Date: Mon, 20 Apr 2026 08:51:01 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Xuan Zhuo , Eugenio =?utf-8?B?UMOpcmV6?= Subject: [PATCH RFC v2 15/18] virtio_balloon: add host_zeroes_pages module parameter Message-ID: <0667676f47ce42c1b9086dc80987773d96f73861.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a module parameter to opt in to the pre-zeroed page optimization. A proper virtio feature flag is needed before this can be merged. insmod virtio_balloon.ko host_zeroes_pages=3D1 When host_zeroes_pages is set, callers skip folio_zero_user() for pages that are known to have been zeroed by the host. This is safe on cache-aliasing architectures because the hypervisor invalidates guest cache lines when reclaiming page backing (e.g. MADV_DONTNEED), so no stale cache state exists when the guest re-maps the page. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- drivers/virtio/virtio_balloon.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloo= n.c index d1fbc8fe8470..2e524bf6f934 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -19,6 +19,11 @@ #include #include =20 +static bool host_zeroes_pages; +module_param(host_zeroes_pages, bool, 0444); +MODULE_PARM_DESC(host_zeroes_pages, + "Host zeroes reported pages, skip guest re-zeroing"); + /* * Balloon device works in 4K page units. So each page is pointed to by * multiple balloon pages. All memory counters in this driver are in ball= oon @@ -1039,6 +1044,7 @@ static int virtballoon_probe(struct virtio_device *vd= ev) vb->pr_dev_info.order =3D 5; #endif =20 + vb->pr_dev_info.host_zeroes_pages =3D host_zeroes_pages; err =3D page_reporting_register(&vb->pr_dev_info); if (err) goto out_unregister_oom; --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 9447C3A4525 for ; Mon, 20 Apr 2026 12:51:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689472; cv=none; b=OvTp7uxS8e2E6cPoh4kHnw6MwfGgcbR9S5s2RlUrgwTxmCZ0q/RdeVP8KKNyDHvkHUp65Qbh23qMzQPXeHIDVg8qQVxoyd1Da2cwr23W56dTGbNeQRIRgxRQuBkpY8ElrHdRBcZCIQKddp2Esuc0DC/ro6i+1ziN5YOg/pxk5mI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689472; c=relaxed/simple; bh=c6CKf7gF4h4nqs4xEImrB5ycxqiLXbgiLtERzixLHo0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=oDmM8Mf2eauVlf2UemXp28IZgFacwSumS2QXX8gMipWbpVaH/EY0HkC6bnHyMr25iX4VO9RaI0M3q3JQ41Qy+ZG6xgTvPmeVI/PljUV4B1kvPagnwvgoPIw9cR4hxMCDd6l3N4WfkiwgMtjVJdtN9aiHc0Big+Hj7Wb5atDKsp8= 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=eTighGm6; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=NoalFSyJ; arc=none smtp.client-ip=170.10.133.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="eTighGm6"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="NoalFSyJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689470; 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=SikkYlL1M+gibhFkMnOOpJ+LH2O2BXdI5hRy13pqHRY=; b=eTighGm6o3quN8Y71TYdY082Gn4ZDD6KO71LoEzVWH3mfSZbgVL1rf3wmSuxNYBpUqQP+k HJpD/fRsG6Hr/ZU0AElHIkcbO5iMX70HoszAqX0v8epBGo878lM45Ma8dCawLmlvRTwhH9 HqcZJ3MPPLYrdbcp0Abaitvtu8oSaPY= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-332-dYlzNfKJNTGLagQsk7W0yA-1; Mon, 20 Apr 2026 08:51:09 -0400 X-MC-Unique: dYlzNfKJNTGLagQsk7W0yA-1 X-Mimecast-MFC-AGG-ID: dYlzNfKJNTGLagQsk7W0yA_1776689468 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-43cfedb10a8so2039775f8f.1 for ; Mon, 20 Apr 2026 05:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689468; x=1777294268; 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=SikkYlL1M+gibhFkMnOOpJ+LH2O2BXdI5hRy13pqHRY=; b=NoalFSyJ5PvAaG5bB1Ek8J7ndNKa4973jXc6XkXuGbfDm5mVifrjIsElBrEYuyY8vY peai1V86bB1f/HDtXcilekecBoeAXaxg20WuNT5wm1kS4yCVFbE6fJl9SuaT1M2Sv2lZ 8MLcnvuyxeS5mB8YDpV8CIXW/BgxxxZeXu7lqai+aujd6WR19RrWNfBFhg9n8jq5t9FF GwMAPF0gai05vUjek8uV47vV7v9mDOGTeg9Aw2XxVS0kg8Z5yI1K2wS11EYm8cXlqAaq YCWGr9UQXj9fXQwJaHlChEK+vkRchfBWRDuRBiZHut1fRQ5KdcTibjxOLsO/vSWUQXP9 fgMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689468; x=1777294268; 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=SikkYlL1M+gibhFkMnOOpJ+LH2O2BXdI5hRy13pqHRY=; b=gJ6kCjJMwx+/QFQh5uPUbKIx0ddciDVFIgrbHG8NgtC8j9A83c5WthxffDneJ6iM7u ys/h96nsuR0TpJHvm3UrVVfeUDqMB/aOO+nvbebBNeh057b1EuaHuvNCHbZjPteE8HIU SUERf63tC3ePQT/iNBAH90CvFSE/Uuzi9OYkrpaAThKMDkQnDISGVLWaihCf9tZv61kx W4PYAO12kvzsSYw3d0lcIWtK0u6DrmVjd3sJwCtlG9jMq6q9Sz3rNGGKQempZSxlxPJX aH720yS5XHDIycmd/hlFJH8zNkJv4abWlWLvdpLqJyiQ8tUYVkRX//YZpKoJ2VN7slSI HteA== X-Gm-Message-State: AOJu0Yxg5hFaseDs4GqIUKV8MOMf90aN54HB0mB2unXRIss4c5DUdRBu dWKTaawQNLRw/s/YSAewGn9KAKsthS8cZflU2lwxrn2KVqJdFF2y3VLcKyjfzA8h5BKgOrQ/gQ3 OrJWJOEpjHN+3q9j1MeYblnugQsNWPrSp7WrcUz6L3QLfJ4jjD+PxpsmvTTBYj7AYBL/gxXZ53Z /TFAKihbomqpYcImhYVHfCEbE6iUvq6UF0gPXJ2b3cI+o= X-Gm-Gg: AeBDietRMoOei7v65UhSkfEN8UyKoqjk4NdXWzAxs9ZfdadJhzBrnfiG0DbSIp+TTFQ cndSN4vqfn6R3RgLWc5JUYr+3FwaXBm0mHu5rM82VNYtW9m2sa7y+/goOslURpdNV3xcOTlwDNe C4sqvwiAE6EvcbPgIu4gSCgh8I7VlzBNRnazDAk7vrEPTAyn7OVltE16OymgjNO42wlXldnVMbF rvc5ylS6XVTydkMeS10exxzlT9kHRSIds6cVm906C8JDbYFzZMXvXOj9HZnKB5WsltIrxAs2W0R e3RbXU7jhZoahRFp9GGgVdQsPvWdCiWrBfFS5TX7HVQXAFIedRbeM4mIChTT5a3Bwe0tqc7SoNt zm1i2kJz+us7qiVJzvwZdJkZ/SYXjnoiJPDCCtCvvBDzk2+2hWVS2Eg== X-Received: by 2002:a05:6000:2511:b0:43e:b0b0:629a with SMTP id ffacd0b85a97d-43fe3e0a1bemr20301782f8f.34.1776689466919; Mon, 20 Apr 2026 05:51:06 -0700 (PDT) X-Received: by 2002:a05:6000:2511:b0:43e:b0b0:629a with SMTP id ffacd0b85a97d-43fe3e0a1bemr20301696f8f.34.1776689466326; Mon, 20 Apr 2026 05:51:06 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e3a7b4sm27168068f8f.22.2026.04.20.05.51.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:51:05 -0700 (PDT) Date: Mon, 20 Apr 2026 08:51:03 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Johannes Weiner , Zi Yan Subject: [PATCH RFC v2 16/18] mm: page_reporting: add flush parameter with page budget Message-ID: <23f8d36128771ded02b426cf71b840500004ca52.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a write-only module parameter "flush" that triggers immediate page reporting. The value specifies approximately how many pages (at page_reporting_order) to report. The flush loops through reporting cycles until the budget is exhausted, all pages are reported, or a signal is pending. echo 512 > /sys/module/page_reporting/parameters/flush Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/page_reporting.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/mm/page_reporting.c b/mm/page_reporting.c index 5e1e1a924b0c..3560f272ab70 100644 --- a/mm/page_reporting.c +++ b/mm/page_reporting.c @@ -354,6 +354,48 @@ static void page_reporting_process(struct work_struct = *work) static DEFINE_MUTEX(page_reporting_mutex); DEFINE_STATIC_KEY_FALSE(page_reporting_enabled); =20 +static int page_reporting_flush_set(const char *val, + const struct kernel_param *kp) +{ + struct page_reporting_dev_info *prdev; + unsigned int budget; + int err; + + err =3D kstrtouint(val, 0, &budget); + if (err) + return err; + if (!budget) + return 0; + + mutex_lock(&page_reporting_mutex); + prdev =3D rcu_dereference_protected(pr_dev_info, + lockdep_is_held(&page_reporting_mutex)); + if (prdev) { + unsigned int reported; + + for (reported =3D 0; reported < budget; + reported +=3D PAGE_REPORTING_CAPACITY) { + flush_delayed_work(&prdev->work); + __page_reporting_request(prdev); + flush_delayed_work(&prdev->work); + if (atomic_read(&prdev->state) =3D=3D PAGE_REPORTING_IDLE) + break; + if (signal_pending(current)) + break; + } + } + mutex_unlock(&page_reporting_mutex); + return 0; +} + +static const struct kernel_param_ops flush_ops =3D { + .set =3D page_reporting_flush_set, + .get =3D param_get_uint, +}; +static unsigned int page_reporting_flush; +module_param_cb(flush, &flush_ops, &page_reporting_flush, 0200); +MODULE_PARM_DESC(flush, "Report up to N pages at page_reporting_order"); + int page_reporting_register(struct page_reporting_dev_info *prdev) { int err =3D 0; --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 2F1193A4F30 for ; Mon, 20 Apr 2026 12:51:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689475; cv=none; b=LEH/S7NVSpqCo8RVd7bA4v7FgrXxqOOiMW89i3pBkaQvPHwYk1vYmpBSL9g3SLMesmQH5p6GfStQjrLAe330wVHFCfvuw3H3qWsffH23eEVLwJtydwDVvC18acxs6RclqMY0Ocg5Ff8ZRSOWR0MeMV4tEcP9evwHz1gsvT4kH8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689475; c=relaxed/simple; bh=b0uEgPLjU9RqUL8qCkAp6CionPNtPZx5K8nQiG2MheA=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=gGN8xL5TnAaErTWEFAbd/Q9PP72xNbonGC4LUTfOMlrWI1g0J7+AcGi8dFsgCBXsanKWVhBsd5Z16PbSNE2N/fN+OpKyRzaxLhJmzow4wg6GmOEW5eOEHvTYYLB8S/QGYRuUr6Rj17KqZLVikZQnYnrKxSxjZ5XYEPYMHtZXJB0= 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=HwxB/CZ+; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=RlrvglR9; arc=none smtp.client-ip=170.10.133.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="HwxB/CZ+"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="RlrvglR9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689473; 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=Bi57iZ++pwWctggr2TvdW1CtXtPNYbcTAE7BCEX37cw=; b=HwxB/CZ+vBrlhpgVxDKjQQkuhKh6kuxAVPWzD7rMpf9wfxUqxaxYPRiUmmBwjFfIpXPiMW IRF8n15CL7GEzyUkb/2kRycvgW/Yh3aYSmmwDY4c5RjTqMumijHtNYZE1dGQvaQbDxuWgu obFsDk20yrgBJIbjSvKIloOlQ/6vvWc= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-434-mk5G55NvMj-0Cgjxxx93mQ-1; Mon, 20 Apr 2026 08:51:12 -0400 X-MC-Unique: mk5G55NvMj-0Cgjxxx93mQ-1 X-Mimecast-MFC-AGG-ID: mk5G55NvMj-0Cgjxxx93mQ_1776689471 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4411a2c034fso527014f8f.3 for ; Mon, 20 Apr 2026 05:51:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689471; x=1777294271; 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=Bi57iZ++pwWctggr2TvdW1CtXtPNYbcTAE7BCEX37cw=; b=RlrvglR9LqasD2Bextw3jxpabOpdIxi376K3w+RRuqI/M0LglK5JQgu5egIg9WKV10 vTMgBoZFCejgvqXvKMe0Cr6d5h8JTrRKklEAB+q+/+yU6cUYaM0+bHw/N3kA012gq3ni 0OIh/kIm71zrR61d2Tm87gT8aPMerz/GiolBpGPCnt0C3HsH/4jkugDJ8wJwa/2+alWA O8Dr8vbTTm9NXWkdvGL+6pdZLy0S53rKEnaQ1zSmml4lHk7t+k/STkfsAWDqbq3oMQWc LVclPEjX9dQtkFamGremxTgYzIK/EYzdfv7PLkC1ks+6MSpEluOGhtNJqpVn3ifGJH1M QncQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689471; x=1777294271; 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=Bi57iZ++pwWctggr2TvdW1CtXtPNYbcTAE7BCEX37cw=; b=hX/w7K2lyKeqq28cImsz1I7Pvz9N4CTsKp0KIwMG3qKFgNAemUWoudjJf/19ZOIT1o ZBjMNDMmhwJD2cxmVLQGWfeTb1TCJ9qfc+yvApHH0U+LVedKJ3bvF7EKlNQlfEMEv64R vCGlLjLqoZYEJayRTw0EN2FjfY7KYnfC989+xVH/fUN6t/PO2R7nvtmnfszKRji/lKRY mhgWooXJnmFKtUYcgeGXex/ERcPyFZn/YYier4n/V9nUzdXGjkg1jrSqlQFOJWqDc4c7 rdOjdzcfrEeF+6f/hhb9wxwFmooGMvcv/tfHzbiE+pnRtNt8kdEfiiqi/3DI8xQikVvj sW3g== X-Gm-Message-State: AOJu0Yxhyg4fKCll0FsOZayYF6wytmToXDmTfJM5iLsJPQGdreJNJI83 86FxruCxC5maUdbsX8dM85PKmvUVMbjQK8d4tWPxZvhz/3zbJHML7vodiZvsjew4WYbYzoEkdE1 AfxciCJ+h+WfDzd02/lz413VpWlrwxsGUPKGkKljZa5nxwsGG7NvVFFgCGuGl5Kmf/Bi8rbtKe/ 1EcbGU6YvWFptXmrNiFw1cmFz0xDD3Ne1UZ4lJFEvHk34= X-Gm-Gg: AeBDieuGsaanqA+WqQ2QfrncGluozj4U30oJ+3A4Eg4nuMu0MR14rzI/ZloWAqnwAc8 S+Jhxb48zb7TGfaCUD9l4PLqxCZuCwNo6aSZkGPTo56EJzyM1QmtBqFOaJBkqpcEAaxJTrS6Dvx 15onBknur6IwHiEc+MlCyBU5wlo7gAshaogtxL24caqyj8W+SqvN8JRrnF9TddMvHw4Hair4N9U K2bkoeJ9qWi2pblBG8nHcdoyOs3YCWUJ7nUxon+UQiI2nXesV9pktnypCEJSF/xzIyZ5OE8nhQL L/3xdxFDN0CQEtoYqDwvnIcY10j++IUVbEcAcrANTqpYBHFhaucIwbmQEhx2b/K3e5DN9V9lD1r zPfRvDvNbHzFE4NS9keF8FcdKkESH0kxk2J0QMbCsJdwxeSxt/ycLkA== X-Received: by 2002:a05:6000:18a6:b0:43d:4e65:303d with SMTP id ffacd0b85a97d-43fe3e14f76mr20125460f8f.37.1776689470702; Mon, 20 Apr 2026 05:51:10 -0700 (PDT) X-Received: by 2002:a05:6000:18a6:b0:43d:4e65:303d with SMTP id ffacd0b85a97d-43fe3e14f76mr20125355f8f.37.1776689469912; Mon, 20 Apr 2026 05:51:09 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43fe4e4633bsm28592720f8f.26.2026.04.20.05.51.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:51:09 -0700 (PDT) Date: Mon, 20 Apr 2026 08:51:06 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Johannes Weiner , Zi Yan , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Barry Song , Axel Rasmussen , Yuanchu Xie , Wei Xu Subject: [PATCH RFC v2 17/18] mm: add free_frozen_pages_hint and put_page_hint APIs Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add free_frozen_pages_hint(page, order, hints) to free a page while marking it as pre-zeroed when PGHINT_ZEROED is set. The PG_zeroed flag is set after __free_pages_prepare so it survives on the free list. Add __folio_put_hint(), folio_put_hint(), and put_page_hint() wrappers for the put_page path. These APIs are intended for balloon drivers during deflation when the host has zeroed the pages. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- include/linux/gfp.h | 2 ++ include/linux/mm.h | 12 ++++++++++++ mm/page_alloc.c | 21 +++++++++++++++------ mm/swap.c | 19 +++++++++++++++++++ 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 14433a20e60c..b226d5e1930e 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -404,6 +404,8 @@ __meminit void *alloc_pages_exact_nid_noprof(int nid, s= ize_t size, gfp_t gfp_mas extern void __free_pages(struct page *page, unsigned int order); extern void free_pages_nolock(struct page *page, unsigned int order); extern void free_pages(unsigned long addr, unsigned int order); +void free_frozen_pages_hint(struct page *page, unsigned int order, + pghint_t hints); =20 #define __free_page(page) __free_pages((page), 0) #define free_page(addr) free_pages((addr), 0) diff --git a/include/linux/mm.h b/include/linux/mm.h index abb4963c1f06..f4e28c55e2c9 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1640,6 +1640,7 @@ static inline struct folio *virt_to_folio(const void = *x) } =20 void __folio_put(struct folio *folio); +void __folio_put_hint(struct folio *folio, pghint_t hints); =20 void split_page(struct page *page, unsigned int order); void folio_copy(struct folio *dst, struct folio *src); @@ -1817,6 +1818,17 @@ static inline void folio_put(struct folio *folio) __folio_put(folio); } =20 +static inline void folio_put_hint(struct folio *folio, pghint_t hints) +{ + if (folio_put_testzero(folio)) + __folio_put_hint(folio, hints); +} + +static inline void put_page_hint(struct page *page, pghint_t hints) +{ + folio_put_hint(page_folio(page), hints); +} + /** * folio_put_refs - Reduce the reference count on a folio. * @folio: The folio. diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a4cfd645599a..f04813db3015 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3000,7 +3000,7 @@ static bool free_frozen_page_commit(struct zone *zone, * Free a pcp page */ static void __free_frozen_pages(struct page *page, unsigned int order, - fpi_t fpi_flags) + fpi_t fpi_flags, pghint_t hints) { unsigned long UP_flags; struct per_cpu_pages *pcp; @@ -3016,6 +3016,9 @@ static void __free_frozen_pages(struct page *page, un= signed int order, if (!__free_pages_prepare(page, order, fpi_flags)) return; =20 + if (hints & PGHINT_ZEROED) + __SetPageZeroed(page); + /* * We only track unmovable, reclaimable and movable on pcp lists. * Place ISOLATE pages on the isolated list because they are being @@ -3051,12 +3054,18 @@ static void __free_frozen_pages(struct page *page, = unsigned int order, =20 void free_frozen_pages(struct page *page, unsigned int order) { - __free_frozen_pages(page, order, FPI_NONE); + __free_frozen_pages(page, order, FPI_NONE, 0); +} + +void free_frozen_pages_hint(struct page *page, unsigned int order, + pghint_t hints) +{ + __free_frozen_pages(page, order, FPI_NONE, hints); } =20 void free_frozen_pages_nolock(struct page *page, unsigned int order) { - __free_frozen_pages(page, order, FPI_TRYLOCK); + __free_frozen_pages(page, order, FPI_TRYLOCK, 0); } =20 /* @@ -5385,7 +5394,7 @@ static void ___free_pages(struct page *page, unsigned= int order, struct alloc_tag *tag =3D pgalloc_tag_get(page); =20 if (put_page_testzero(page)) - __free_frozen_pages(page, order, fpi_flags); + __free_frozen_pages(page, order, fpi_flags, 0); else if (!head) { pgalloc_tag_sub_pages(tag, (1 << order) - 1); while (order-- > 0) { @@ -5396,7 +5405,7 @@ static void ___free_pages(struct page *page, unsigned= int order, */ clear_page_tag_ref(page + (1 << order)); __free_frozen_pages(page + (1 << order), order, - fpi_flags); + fpi_flags, 0); } } } @@ -7879,7 +7888,7 @@ struct page *alloc_frozen_pages_nolock_noprof(gfp_t g= fp_flags, int nid, unsigned =20 if (memcg_kmem_online() && page && (gfp_flags & __GFP_ACCOUNT) && unlikely(__memcg_kmem_charge_page(page, alloc_gfp, order) !=3D 0)) { - __free_frozen_pages(page, order, FPI_TRYLOCK); + __free_frozen_pages(page, order, FPI_TRYLOCK, 0); page =3D NULL; } trace_mm_page_alloc(page, order, alloc_gfp, ac.migratetype); diff --git a/mm/swap.c b/mm/swap.c index bb19ccbece46..1dfd232d3944 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -113,6 +113,25 @@ void __folio_put(struct folio *folio) } EXPORT_SYMBOL(__folio_put); =20 +void __folio_put_hint(struct folio *folio, pghint_t hints) +{ + if (unlikely(folio_is_zone_device(folio))) { + free_zone_device_folio(folio); + return; + } + + if (folio_test_hugetlb(folio)) { + free_huge_folio(folio); + return; + } + + page_cache_release(folio); + folio_unqueue_deferred_split(folio); + mem_cgroup_uncharge(folio); + free_frozen_pages_hint(&folio->page, folio_order(folio), hints); +} +EXPORT_SYMBOL(__folio_put_hint); + typedef void (*move_fn_t)(struct lruvec *lruvec, struct folio *folio); =20 static void lru_add(struct lruvec *lruvec, struct folio *folio) --=20 MST From nobody Thu Jun 18 07:54:19 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 4F3443A4F5F for ; Mon, 20 Apr 2026 12:51:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689478; cv=none; b=rYSbWtASPiJRm+NQrBspnUl9BbbRK/TR36gtt4YwLyUCfpNTQG7LVww9LQ+oiYyGqylwamt53EnyFMJzXm7g6xA+UTDzat3TO3ZPhijKsJQl5HLFJC/Ev7Zl0LYpdYrffX/8Zh6mPl955SIQy6yve7LLNGYlC91EsdSKBz/BNvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776689478; c=relaxed/simple; bh=eX3Z6XPUFBMrbZVyjGzejWpH6ibjpiwEgtfLEO0L8/I=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=n69/CxAFulfYqS13vj1YroWOErlW7qXifli7Xh2KgTmBLCTOy7RsNiV7rvDW1T6edTwZ2689mfoFOMjd7XWQ4rIKWsjxrrg6wg4MwrXFU3LVUeU+7+IlRCfV8pmm4+bAEBJvdplXAjfrlI+5ubjYVbVMwaL0dj2++pqHSyOBtxk= 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=MBcn2bSa; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=k1A3VN0A; arc=none smtp.client-ip=170.10.133.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="MBcn2bSa"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="k1A3VN0A" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1776689476; 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=J/g8ZGQWZ8XlzWBJ+7NKr3kj7gz6pSemT6E24/mXHPA=; b=MBcn2bSa/tTENZ9aPJtiq+Mx2MDzHBJQmCXagwN3MefGjELJYjZq7vaKaLrGL24Qr406K2 ApOuAQaRh7uAQt+WkBC6tf2Kqjy269YIeX753bBIa/OmerwCc9nCaIeTALJelLCHtT8t4o taSWS8gEgFc9Kr5OvCVYiUyMRm92EQ8= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-14-1SpaCBruOwK_RtBGni62pQ-1; Mon, 20 Apr 2026 08:51:15 -0400 X-MC-Unique: 1SpaCBruOwK_RtBGni62pQ-1 X-Mimecast-MFC-AGG-ID: 1SpaCBruOwK_RtBGni62pQ_1776689474 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4836abfc742so34708325e9.0 for ; Mon, 20 Apr 2026 05:51:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1776689474; x=1777294274; 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=J/g8ZGQWZ8XlzWBJ+7NKr3kj7gz6pSemT6E24/mXHPA=; b=k1A3VN0A1cGxLoEaG0GeVnoNorXaY2knTFzwTleA3fW5tFs/OLAuZRD5zYZM46WGew G3qyUD+MA160wofuYKcSgGt937VbUaUAzbyQMtrOuV6Qc3EGgdAdukWdhZwkuy1MRcwl 6zbKjBXn/1Ie0GJrY7bxcBnCF0CBXuNVvkAiix4neImBdaTd5D02DZ6TykXbadM1HkcP FEYkBWZRtKq/gHxHoJu8dJzHD+R5vt2Ev7EshU06b3RsBntwVVJGlVIKm7/zHl7b8bsN 9zMU+V5Ypp1UFwONG6tQui83i/79G9XUY3vtymxRfGCKgJ5bKnGa7d0ONQYNV6gBo2BE kIZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776689474; x=1777294274; 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=J/g8ZGQWZ8XlzWBJ+7NKr3kj7gz6pSemT6E24/mXHPA=; b=KRW49bS739Y1yGihwQxz2eSKm9xK3wvx5t/PCCsaKRWqW3CvKY3Dpz9NSUqX7pqNqw qRx1K551jgx60HiuEnFNd2ww8odt7F8qhZ2i6MAslaIUzOJVZbQGsCWroFnlzBwKoxaT VHYpIdHseZUsHOLED2bCwPHqtmsCP99n7GijjEuqnJ3gGGKspGsc6DmUVzVPVoQ520sx tPR74+jlV/lKN/0FRO2gdDt2bAdx5f1eS+RRIBq97jKTBlcl/24aAM4IR8VrFZROco8f q7rORYrieMINhJaGOdoAdZiMCgfD2tmz6/XYT+KiSpN61mspZdrXU/bKM+sTVoPRMYbX bQyQ== X-Gm-Message-State: AOJu0YxxStRBq4GGOOzxxD5xng7I/e7NIa4Z1i6u161SRQxuMC56mCxg hpf9T1b/xVu3NoYUtxaI/1ApjZmTiLyE0z8aKXV5DIpaDAyQImZ+MOn+g4lIaXugwa4DwUEUZ1D 67ugGVGvw4dU8/cTIKr3n58vBzYPFzDf6CHQ7UoFv7WRn+C/fgt7nI3dpM+8nte1a7NCdlguVjU 6eY3SkvHzKt0S2rFM9mD7gU7kWh4Zy6qTbf6KxX36ky4M= X-Gm-Gg: AeBDievfgTakvipvR73KwHQE2sx0qYCSFmOnoiNUB/xTvMZEfhUeq6HOkrsc9TnnK9b CFs1L1kk72My99SQKbx4idXo5Ahkkoo3y2Xnzi4Rbyp1hTKBMZix0FSS035L4AFOj4f/FJX4zgo HCR1yDHr81tPvxz1tDukM/t+N00Cut7+owU/cQt/7WvQfV3jsAduNDEnLBgYhHHpbDFJjIw3LD8 3qD7kuyma4wL1VfZ5H6ovl1mrwNfDJaDlaodNLwqh77B8Hv3Nv74DbgAPxPwXrjFoZE1KORhk78 Hz1IULxV52SH6M/TL2gEJuTBJBlCG3d/ssUBNeN729X8qXG83EV9EnbiXttcdoFd1+fbr7/ByIK IQBIreFqr3bf9r0Z1YJvATQoPzkpmm//ddru3GrfHuMwOks1brOLVDA== X-Received: by 2002:a05:600c:4ecf:b0:488:caed:5cc7 with SMTP id 5b1f17b1804b1-488fb76fddcmr200448045e9.15.1776689473424; Mon, 20 Apr 2026 05:51:13 -0700 (PDT) X-Received: by 2002:a05:600c:4ecf:b0:488:caed:5cc7 with SMTP id 5b1f17b1804b1-488fb76fddcmr200447555e9.15.1776689472840; Mon, 20 Apr 2026 05:51:12 -0700 (PDT) Received: from redhat.com (IGLD-80-230-25-21.inter.net.il. [80.230.25.21]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891c320084sm125770965e9.2.2026.04.20.05.51.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 05:51:12 -0700 (PDT) Date: Mon, 20 Apr 2026 08:51:10 -0400 From: "Michael S. Tsirkin" To: linux-kernel@vger.kernel.org Cc: Andrew Morton , David Hildenbrand , Vlastimil Babka , Brendan Jackman , Michal Hocko , Suren Baghdasaryan , Jason Wang , Andrea Arcangeli , linux-mm@kvack.org, virtualization@lists.linux.dev, Xuan Zhuo , Eugenio =?utf-8?B?UMOpcmV6?= Subject: [PATCH RFC v2 18/18] virtio_balloon: mark deflated pages as pre-zeroed Message-ID: <1b1f7c79ef36716f7819c8e2a65a3d4a1fde3b46.1776689093.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-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Mark deflated pages as pre-zeroed when host_zeroes_pages is set. Use put_page_hint() with PGHINT_ZEROED during deflation so the freed pages carry PG_zeroed in the buddy allocator, allowing the next allocation to skip redundant zeroing. Signed-off-by: Michael S. Tsirkin Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- drivers/virtio/virtio_balloon.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloo= n.c index 2e524bf6f934..9b35203f579d 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -299,7 +299,10 @@ static void release_pages_balloon(struct virtio_balloo= n *vb, =20 list_for_each_entry_safe(page, next, pages, lru) { list_del(&page->lru); - put_page(page); /* balloon reference */ + if (host_zeroes_pages) + put_page_hint(page, PGHINT_ZEROED); + else + put_page(page); } } =20 --=20 MST