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 13FE0C83F1A for ; Thu, 17 Jul 2025 11:52:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 672ED8D000E; Thu, 17 Jul 2025 07:52:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 624898D0009; Thu, 17 Jul 2025 07:52:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 539B68D000E; Thu, 17 Jul 2025 07:52:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 4403D8D0009 for ; Thu, 17 Jul 2025 07:52:42 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 128E81A06BE for ; Thu, 17 Jul 2025 11:52:42 +0000 (UTC) X-FDA: 83673594564.27.E886341 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf04.hostedemail.com (Postfix) with ESMTP id DFC5040003 for ; Thu, 17 Jul 2025 11:52:39 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JaBZcMdS; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf04.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=1752753159; a=rsa-sha256; cv=none; b=V5z0O9ZPXasIDBkeMZQn1abAtD/krqsXp+eCyV8D06Co3OgaZhJ8W8kJy0bJAuC4DHQYbV 1tSWSdwxQElDpqIzdeXJpL/3cD3CdCoBNxLGdwLQzM1may4kCgG4SLGmF/uI2FHkvMEs68 7opGbzT8m6U93EEIIVVe1yx7NFzyYYc= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JaBZcMdS; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf04.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=1752753159; 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=y93PTvMkvM029q6ldi/06ftGqYZT07G8pbjSDy6T3hs=; b=wercKF+ySeD/a+14Lap5idDZrN5rogjVsiaTFVSIjNs/tPnTN1h+nbCWmFKq59aOahLYDu T6qamTnWDbCjRMfM1GMpCPT8zmsOmHa2PfA7XEZv0bfrpeuZHHeulw5kvOruediGwAh4eI 6Az5g6d9tXPhNFGUwTTMdGmPbKykwCU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752753159; 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=y93PTvMkvM029q6ldi/06ftGqYZT07G8pbjSDy6T3hs=; b=JaBZcMdS5S9XA8IExD9jvf71ewPoJgEeTkgATan/uj7Tqn4tpll6lA5p7Llf6IuIT0PSV3 hyEpv9YGxyqPedvRhfQ6oLoJBQtrslqi35TZY3y/Ah4fXZ9VEuqJbMwT/CyRyuumbity3U d1ZkrwEazsKmxfd4idHoRCnnvcBGW04= 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-335-5uoawItpPbmFtvvNxk14Nw-1; Thu, 17 Jul 2025 07:52:36 -0400 X-MC-Unique: 5uoawItpPbmFtvvNxk14Nw-1 X-Mimecast-MFC-AGG-ID: 5uoawItpPbmFtvvNxk14Nw_1752753155 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a4f8192e2cso552304f8f.3 for ; Thu, 17 Jul 2025 04:52:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752753155; x=1753357955; 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=y93PTvMkvM029q6ldi/06ftGqYZT07G8pbjSDy6T3hs=; b=cAQLzRBKtuMJiZqiHm+vCWgxdfh7zpoAytCwzXFbH7IFazdhQoQjOjfubcc4YIxwBc aAC8lcVeKmQne86HTDvbVItSDukZrwZ/3lglD14omR+LZjoYyANgRCtrbVGSfJbp295o b5dk7DJBCaieMD4qg4bv5BmDG/5CvX391BjMOG4fQPJ8Scgt5xYTOqh/rZts733d0OC4 0FjL6tYoIpNi8OsttdvETgXbCBWI1+RplvF2GwEJmadqB+TC29l2/LyaAHmVFz/4Q7+x 3HSOWOT5HtOX/22AUOfTfDPXDWshQ12Zh2VXhRj3OvpEfPcaVpm+hCnf8/bdZddcJigX xuyw== X-Gm-Message-State: AOJu0Ywl9Q8R4QxjsTuD7VHs1K6MVrAIPD/TWABOR/20u2HqjBniPyie b1iCZMUajOL+Dg4wC0mu8p4t+fYjag1LusGE/GdVZF85XuJWEDdiScvPCi/cwCfEdg11cQl1bPH oToqXxam03WFmIABaXe2Vlv/Mb5ttDiYC6Od6L3gpRUZjCb5xBk8n X-Gm-Gg: ASbGncsHD6mgQFqzNBLhECVBsfc+gn6RrW3NGhvINu/KMIkpoHc+YV6IiCCCnVuFkg2 3AGauD4yb/biU1EjhN74up9+ixkS8PsMs3kh18lVSruRgvsqa6LwRh6qKpcRI78Qryf/pNBQ0O3 5AWZWZaGSjfcU3gjAohn8BDmVe68x0jRdcGB/Amn2UWR6fi+VAM7ueNwELFOtYXi7IoS6BzHbEE IX/suOylCmi5GlvhONF5yyIi9JhRyfCgdqxcKNVs0use3xKYZ7NNw23RTwaYG8VfXxiBdDo3mvq 2EFSBFCUgLz6CLqScvj6YPfsgtSTM58pmbmVD5tT7j2SRmnwaPRiZ9zNhbs5SDRUuoVcJVUiQ6g BoEbGwH9xARyvabpBlQ7TleI= X-Received: by 2002:a5d:6f14:0:b0:3a4:f661:c3e0 with SMTP id ffacd0b85a97d-3b60e510baamr4180680f8f.45.1752753154938; Thu, 17 Jul 2025 04:52:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEAqQmPlaR0MqxERo3NRLrhaU4oEs8iGAGrgiheQNLTojFB3jUgPbGxNACr3plB8i5Bf9h92A== X-Received: by 2002:a5d:6f14:0:b0:3a4:f661:c3e0 with SMTP id ffacd0b85a97d-3b60e510baamr4180643f8f.45.1752753154425; Thu, 17 Jul 2025 04:52:34 -0700 (PDT) Received: from localhost (p200300d82f1f36000dc826ee9aa9fdc7.dip0.t-ipconnect.de. [2003:d8:2f1f:3600:dc8:26ee:9aa9:fdc7]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8bd18ffsm20281626f8f.9.2025.07.17.04.52.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 17 Jul 2025 04:52:33 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, xen-devel@lists.xenproject.org, linux-fsdevel@vger.kernel.org, nvdimm@lists.linux.dev, David Hildenbrand , Andrew Morton , Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Dan Williams , Matthew Wilcox , Jan Kara , Alexander Viro , Christian Brauner , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Jann Horn , Pedro Falcato , Hugh Dickins , Oscar Salvador , Lance Yang Subject: [PATCH v2 8/9] mm: introduce and use vm_normal_page_pud() Date: Thu, 17 Jul 2025 13:52:11 +0200 Message-ID: <20250717115212.1825089-9-david@redhat.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250717115212.1825089-1-david@redhat.com> References: <20250717115212.1825089-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: nLAlmZXm9mqvJIzh7u9fzvZOHFe9RWcsbWab--GADD8_1752753155 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: DFC5040003 X-Stat-Signature: tpds4hcqdpox1tpndoo3393eikqrc9ng X-HE-Tag: 1752753159-317606 X-HE-Meta: U2FsdGVkX18L1AYIQWzHtfaeP3aIzi434FQs1fDYkCYYVNFWtcS014YDexcl15tTSCAHZm40k+MO3HPJ/w1ogj6F6uXISRz4ujfYJF1VnTcV8HATtFbdGCkeX4wH5JgKt/etL5SqbUJ9SAXpcQd/xLfVtigppX+kS7VlfmYsBaXQlkluwg7PQtifrdezlZ5QXJ/p5yqJAjlMTAc1HmnZGGbo083u2405oMbUg75E7xvBRKLPcfEap3pZ2v6o5mqauKTm00PfdISQuqOZTZMM1WVhfLnXZB4VQdH+ZkNe4KT6bgcDymrlQNK8p6Nyg0cuLOXpZl7rNIxPb9BgvsiNpyztV3R3o9v6ZlTdnvcI10Mr5v6ZHiYfS1IGoPad/A07l4l+rXov3uZOoMhAxdVHd6wgMjC0Sdz+e0o53/VnbjFrmx5VH+TBSaNtyZwrr8q3pMwuDTRfRzaMwcjz14ABV0A0OUdV2lOe61IC3g1ZQkODKuoLykP3qr33LGcX77bbItTqhRGVsATGbzxatEFzaEfxEdPEK9cHndEpR93+i56wpQjE2etdPn7/l0R7nUex18qV/xaLeJQElxb4Merf5fqU0iRK0S2I7N6nxEyWocMJtXg+b+Kn8LGlP4CgIfyu0NTp+y7OZISZAa9q7Zwsjv1Y1Nm6TdIbFcrwbcFjTWCFCq3wJ9KZ7K8T72aav+FSTj2w4C+bW6g6Vxht08yaRx0QG6B+cXCQCFMnK2PRBH6OqiNnQCL4N6WLWFIvVjUJVTLwAArRS8tVsf2ytCTlQPFpd89YbT16dj7DEG54429+nM2F8qQZXTmCxNH8zOgLyovAbXgzv+PZeOAYM4mkH+hCGiVRj53jzDKzz3pUK8bVQwjmxYZUfqtpKfsI6xBGX/tKMZVn4wF0n52c3ZrHPlbifnbnRBBM7DYx72s7XKZRQKb5Py+s+WYql2gmFk0kifxaAN5m0xQdWmWVdh4 /Z0yivFn uckJZAnX+hpRBopGsdbE3TSdYqSTDmsbkd3jRVoCqBFnbt2lNyYaqV8GIRfSWdVDXrIstc+Hxamr9q2NMogewLNdpmqsOpBhlAh/mD/SEtbBejpS4nTsuXYeXgjjdYQ6G9dxLKzYC/we7Dd8qwWhJ9Sflh8T2ikLmxYF7AKnbHyFNVRk1xGcAqtLEcOPpyPn54A95MZT3pIawZy318rA1+u3N6vu+FTFV1+ih0vVd2tE8OEZhetZPsZ9+RAdwoFD1ORFoai6au6V2uFMAd23IoXqX5y5/6egIhEYMf50uW2C5fols1mb7x2MJUzdnHBbJy/8Y3MQdT/DgrDsFbKV7vaYy9UwM4JEN1Vxv608hwX7u/LvSYQnPQqT2QhQSVNNUdidWHw3zrwh6mgv9BMnKafo8KMyLLfKO09U2qOvckbLmxkTiah+UC8b2Y5m/gxRv10wvmE0o4f3BtZDrHhPZDlAe/6I7iz6bDxppd6ix3kkd6opYc7uouQCbqdTSrUqSE0M3AEg2eaLX1Yb6MpjndHY4goay/CEsyWMf2iTBy4W83hFWbaTsYZYKDGXIZ9SdyU3nkyjjol44FAoeUMN/llc+gMLlZkaOzmiCPFw2gFsupIkryrFFNZMp5N3e6xot0/z6ioXutV3tZuI= 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 introduce vm_normal_page_pud(), which ends up being fairly simple because of our new common helpers and there not being a PUD-sized zero folio. Use vm_normal_page_pud() in folio_walk_start() to resolve a TODO, structuring the code like the other (pmd/pte) cases. Defer introducing vm_normal_folio_pud() until really used. Reviewed-by: Oscar Salvador Signed-off-by: David Hildenbrand --- include/linux/mm.h | 2 ++ mm/memory.c | 27 +++++++++++++++++++++++++++ mm/pagewalk.c | 20 ++++++++++---------- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index abc47f1f307fb..0eb991262fbbf 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2349,6 +2349,8 @@ struct folio *vm_normal_folio_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t pmd); struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t pmd); +struct page *vm_normal_page_pud(struct vm_area_struct *vma, unsigned long addr, + pud_t pud); void zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, unsigned long size); diff --git a/mm/memory.c b/mm/memory.c index c43ae5e4d7644..00a0d7ae3ba4a 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -796,6 +796,33 @@ struct folio *vm_normal_folio_pmd(struct vm_area_struct *vma, return page_folio(page); return NULL; } + +/** + * vm_normal_page_pud() - Get the "struct page" associated with a PUD + * @vma: The VMA mapping the @pud. + * @addr: The address where the @pud is mapped. + * @pud: The PUD. + * + * Get the "struct page" associated with a PUD. See vm_normal_page_pfn() + * for details. + * + * Return: Returns the "struct page" if this is a "normal" mapping. Returns + * NULL if this is a "special" mapping. + */ +struct page *vm_normal_page_pud(struct vm_area_struct *vma, + unsigned long addr, pud_t pud) +{ + unsigned long pfn = pud_pfn(pud); + + if (unlikely(pud_special(pud))) { + if (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP)) + return NULL; + + print_bad_page_map(vma, addr, pud_val(pud), NULL); + return NULL; + } + return vm_normal_page_pfn(vma, addr, pfn, pud_val(pud)); +} #endif /** diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 648038247a8d2..c6753d370ff4e 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -902,23 +902,23 @@ struct folio *folio_walk_start(struct folio_walk *fw, fw->pudp = pudp; fw->pud = pud; - /* - * TODO: FW_MIGRATION support for PUD migration entries - * once there are relevant users. - */ - if (!pud_present(pud) || pud_special(pud)) { + if (pud_none(pud)) { spin_unlock(ptl); goto not_found; - } else if (!pud_leaf(pud)) { + } else if (pud_present(pud) && !pud_leaf(pud)) { spin_unlock(ptl); goto pmd_table; + } else if (pud_present(pud)) { + page = vm_normal_page_pud(vma, addr, pud); + if (page) + goto found; } /* - * TODO: vm_normal_page_pud() will be handy once we want to - * support PUD mappings in VM_PFNMAP|VM_MIXEDMAP VMAs. + * TODO: FW_MIGRATION support for PUD migration entries + * once there are relevant users. */ - page = pud_page(pud); - goto found; + spin_unlock(ptl); + goto not_found; } pmd_table: -- 2.50.1