From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 642C2C7115F for ; Tue, 17 Jun 2025 15:44:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9DE226B00A7; Tue, 17 Jun 2025 11:44:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9692B6B00A8; Tue, 17 Jun 2025 11:44:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 792186B00A9; Tue, 17 Jun 2025 11:44:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 5F0CC6B00A7 for ; Tue, 17 Jun 2025 11:44:14 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 374DA8057E for ; Tue, 17 Jun 2025 15:44:14 +0000 (UTC) X-FDA: 83565314028.17.F6D80DF Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf21.hostedemail.com (Postfix) with ESMTP id EA8961C0005 for ; Tue, 17 Jun 2025 15:44:11 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=OqiiKPJg; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf21.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750175052; a=rsa-sha256; cv=none; b=2GMB+2Fq1LDOfFnmT4vT8P8sNdZEmR2VnN3OoScb1z45CCpVXnDKwOQoLFTrx2X3ysfe4u o8j1GLv05Es4GdBFbwUuvwxNjJ2SR3wT0GqCWrUvPed9khT78cpRSr9l8PxfttikaXeZwT pYCPKHsgpCJUQNPaAGN8eFLIvvxATrE= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=OqiiKPJg; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf21.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750175052; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VPSX3LBtUNEGTHSkguHJQ+rqsVYvGpTDP2rR8uKdQH8=; b=rbbm+KzEYT+QJe1LX9SGb6DVNtJsz+r1c+tCGsc/72d6KJFWgRUvG/feO7eRQj/M6K177J BPbZXIiThHhP5GQXJBZBj+3ApkUiVJqTi+rbWh2WPFyktrQSvdn8zZTpO68YzENZLtuxRB /9q30baZplNgT9IKXGz9dm9s3TX/bFU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1750175051; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VPSX3LBtUNEGTHSkguHJQ+rqsVYvGpTDP2rR8uKdQH8=; b=OqiiKPJgGjwJvnyHCQ9bW3pWGxsDQtnzRHGZtpFpkrAwwPysza+JZG6oLXQWYs4kI0gQkM DfkyVnH8cUEG4SsVxJRqMjIctx6eX3XIOUM8htIhr5od94Ud/KRB60yMMyPpSLNVyhc2ko FklImE9++mn4oreUwQt4CgL4aFspaJE= 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-553-FCLCPN9JNT-137oIuPZkYA-1; Tue, 17 Jun 2025 11:44:10 -0400 X-MC-Unique: FCLCPN9JNT-137oIuPZkYA-1 X-Mimecast-MFC-AGG-ID: FCLCPN9JNT-137oIuPZkYA_1750175049 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a37a0d1005so3556406f8f.3 for ; Tue, 17 Jun 2025 08:44:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750175049; x=1750779849; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VPSX3LBtUNEGTHSkguHJQ+rqsVYvGpTDP2rR8uKdQH8=; b=gJ4jIejyJ7gT1YXRpQEsnHbqFhkv2BCHXTU+tm5gD3vtUO9s0okgFCwYWx2N/po24y glzcwCbJiz3jiHVh/JIrELu6QP4+rJVtnXeZfo7I88wa4NwG3ocDegMTCaCugmhs7wof T02E9paoh2JCqLQsX65cg++3YTAc4+H+q0bAL3TAuri/15CNhWmjgacvXi/NcNDyUvLQ aGVFVw2ATs3NHSALu8hyHyzG0gP3gYkMVCgmndnhfl6zQMKCyNI4Xi25VLO4ADR18d7k PpOx/8zLe3GSde6R+qKw0J/lZ7g06RH6uXSl5C+y2vyiT9ktBol1Avvj8RAVR15b2G0j dxCg== X-Forwarded-Encrypted: i=1; AJvYcCW2wSOA+dH0ZVRR0Jzs6e8M2rBw6zM3NHz58b3ntck2XEuOqDVI8NVFgV03e9AVsn1md5kb/KAm3g==@kvack.org X-Gm-Message-State: AOJu0YwKKMzv4h6ixo66ohCj4mbjnOMGDE6biZ3yCJWAflgfq68e2mM0 e+fs+OGRPtzcPIjBSTTCQlGQfqGopTpo5UspWnI2LAAV7C6CqrP+4jhXA7pqfnHbCYcaVzOKD2x m3Vf4927g8iGUvgjTowPTiZq/6HgCWjNOZXrKSZ1GqSO5c4EeCXP6cPH1FqBk5oQ= X-Gm-Gg: ASbGnctHc/Mf3DB3dWKB+qz7qeIUriKfnPqLv1AabElyX73y1yH6z1DzplkFBk3w34t kgvmwNnsXZbsP83lpdmXPrlf7k+vl9LP/lQIIg54iSTOt67AGQMaSO2yOQGyEf+1hZvc4LQ0ItS 6rbIWFDbVKkrEZ0cBmSo2eAVhcs0LZuBEfGFlZrlN87kWLOBXFc0AzAxDb3yvo/zLIlZUS0+U7T CFMa/ChZAigStXMjimzUTzW3yoFobN81qkwhgjQ7mTA6fdU6VHqjk1L8mf9gNgjGqRn5/rdhm5P BMC7VzJRYPlxsSKEOETQKfn+YvUuN0YNak6kVtrE0FMiRh8QJNIEejpOWhIwRI5JVW7BlYxaN01 l2djU1g== X-Received: by 2002:a5d:64c5:0:b0:3a5:2670:e220 with SMTP id ffacd0b85a97d-3a572e6b9ffmr8898789f8f.32.1750175049005; Tue, 17 Jun 2025 08:44:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHM5m+wJRDUa8DrC/K/257QBXTR6G19KsTYyK8OpbCkrMRqwW7zfUBGXG+Jg5gfXSGV5z4C0A== X-Received: by 2002:a5d:64c5:0:b0:3a5:2670:e220 with SMTP id ffacd0b85a97d-3a572e6b9ffmr8898776f8f.32.1750175048645; Tue, 17 Jun 2025 08:44:08 -0700 (PDT) Received: from localhost (p200300d82f3107003851c66ab6b93490.dip0.t-ipconnect.de. [2003:d8:2f31:700:3851:c66a:b6b9:3490]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a568b1eb9bsm14491105f8f.69.2025.06.17.08.44.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Jun 2025 08:44:08 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, nvdimm@lists.linux.dev, David Hildenbrand , Andrew Morton , Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Dan Williams , Alistair Popple , Matthew Wilcox , Jan Kara , Alexander Viro , Christian Brauner , Zi Yan , Baolin Wang , Lorenzo Stoakes , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato Subject: [PATCH RFC 09/14] mm/memory: introduce is_huge_zero_pfn() and use it in vm_normal_page_pmd() Date: Tue, 17 Jun 2025 17:43:40 +0200 Message-ID: <20250617154345.2494405-10-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250617154345.2494405-1-david@redhat.com> References: <20250617154345.2494405-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: H6TaZ5bX2WnWSsz0nC_kn5-I2ngKqTSLQUNZzMjlbYY_1750175049 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: EA8961C0005 X-Stat-Signature: xeey7an3oio16j3zzgtq5jgz66xg7dof X-Rspam-User: X-HE-Tag: 1750175051-593298 X-HE-Meta: U2FsdGVkX19oNyMzvqBlpTRSVQESPn+YlChNKLPXA/2MGVzsNs4i1CFBLJWPtymQ41YfG68TFNCh9yzOxZ2YHPi7dAHpKwXf+GeAskZlhvn48IIJ3S7crtlERgnjJ03tdr2W++KHGbQNPeRjK2wziHue0qSzeB79cotohOgxF4acbEzmibI6epVSQxdbbgWICYfSzSZqO3ITFVI1WmAojG3Bye5suG14qTHAWW04GOBCtjWYmugKrwzOPeBrBrVmEHoJWZhSdpWT2Btb36o9A8ApF3v80AIQ6Nu+T0uygSo+lFIMGSv3rVWusZDj7yizSs7jh5BFu5j3KZH7D+lgOIz85oZLwZJcdPzQPZ2ZUEMLJxASb9WS0E4prLRWSJZU39wPruELuXRc9EaaY+ZdZ6jbjgycbWpguXxR74Yllj08xLCoyKZCxRZZaxxqTEmx7a28f68M+KHkmgwASukKAvPnsZ6bxoq/HSb8RxSEVr2CNLxDZngLIz7L/+A4aEA8fOW46ji/ZPVGubMirdmA7SWQgNK5rayT/2Tcd0jwFsfLUJbnezgBc6zXYRmG+Lbd4LaWwMMK3OUQnEVu3ffvTvDA1+BKyJvCqrtvVPBEKRxoD8IOa9XCssF1808CyDrqkbGTccE4kL38A72GVfw/ucsa7FsJz7LMLDXURreV6nlCcHpaO3QlFQEScG6u3vurzqC9LoNOw/xNryQWS7Q7XFqTNw3dBxiRZDSp67bDrdXi4VhGSLExKu2JWDt2S5UxAmvenl7BQ5fZxIPZnbUeyaN59iKzdqxOlC3ZPq8rFa1/avDEnnJcyPa4Ho9WMrfC2pGBpLs5NfMiocPN7gEE4dBrj9kMOPa1yYzEHtbOTvMSQ4VZXwGXu9SBXUEY0W6CnmDibtJffJCEoSrBqf2yGVYJe/P7fG5/im4H6uH24S1D21yzZp3J3JJr/Gf3CQUiwiu1RjRz1QbRjJ6LmFC CZ4E/IbF NOIJtBDxmE6JL8KtRHclyS3Mi1JoRFmVLY4WY+V0Z708LaB24Siiu4+wjKzGwfBVofFU0aeRtivbeM8DyNbuFFwoUl6RlCD7xkI4qGr5Xcwmm4xWVkRg2twQpD6BPHvYJLXm5TmE622wPPd9FfuOrQzhqayMWk2b/9d1imw7pysEvdZaBYHzkRoRTDkML/YnkNokCBEHg/W/PRknOPFxlEkpYTDRSMhSA+agsIiasw9oiTBI25AD2Wc/qzT368fVgvFxFUu469uNuHCMOtYQcRxOtcNjbG+5g6Geg5Nfc5mr7T0WYbC1qS349I1ZByUoRLTJ0WCaSOf6olDqM5hLyxiASIjLsJRU4484Nb9FHZaru4RB+tY+3A1MkgfI3486qcaB9jSFOSMHwLG4nv12SBn99jnhx10a+yidRu8AApz6hUFk4MboEuqCQVYhJzBwDPA5j4rhOkttOEl2/v8xT6mQgtsr0Fnpi/nYFghQz1WkAVvdbvHT0+UrAPq3quctaVSsLqJJMMrjKxZkT+3jNjXf3r77df6iC+BmM X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Let's avoid working with the PMD when not required. If vm_normal_page_pmd() would be called on something that is not a present pmd, it would already be a bug (pfn possibly garbage). While at it, let's support passing in any pfn covered by the huge zero folio by masking off PFN bits -- which should be rather cheap. Signed-off-by: David Hildenbrand --- include/linux/huge_mm.h | 12 +++++++++++- mm/memory.c | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 35e34e6a98a27..b260f9a1fd3f2 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -483,9 +483,14 @@ static inline bool is_huge_zero_folio(const struct folio *folio) return READ_ONCE(huge_zero_folio) == folio; } +static inline bool is_huge_zero_pfn(unsigned long pfn) +{ + return READ_ONCE(huge_zero_pfn) == (pfn & ~(HPAGE_PMD_NR - 1)); +} + static inline bool is_huge_zero_pmd(pmd_t pmd) { - return pmd_present(pmd) && READ_ONCE(huge_zero_pfn) == pmd_pfn(pmd); + return pmd_present(pmd) && is_huge_zero_pfn(pmd_pfn(pmd)); } struct folio *mm_get_huge_zero_folio(struct mm_struct *mm); @@ -633,6 +638,11 @@ static inline bool is_huge_zero_folio(const struct folio *folio) return false; } +static inline bool is_huge_zero_pfn(unsigned long pfn) +{ + return false; +} + static inline bool is_huge_zero_pmd(pmd_t pmd) { return false; diff --git a/mm/memory.c b/mm/memory.c index ef277dab69e33..b6c069f4ad11f 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -669,7 +669,7 @@ struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr, } } - if (is_huge_zero_pmd(pmd)) + if (is_huge_zero_pfn(pfn)) return NULL; /* -- 2.49.0