From nobody Wed Sep 17 15:44:56 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD26BC4332F for ; Sat, 17 Dec 2022 18:57:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230213AbiLQS5P (ORCPT ); Sat, 17 Dec 2022 13:57:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230052AbiLQSzj (ORCPT ); Sat, 17 Dec 2022 13:55:39 -0500 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7994FBE7; Sat, 17 Dec 2022 10:55:37 -0800 (PST) Date: Sat, 17 Dec 2022 18:55:33 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1671303333; h=from:from:sender:sender:reply-to: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; bh=lKKXJOtH81Nxky+4PgDivO30jQ9slzM0RDWljCDF8b0=; b=fHrySRWb/Qy+LCtVqUXNzNi8iI4MK5TvsICB9NoiwX0Z6I5Zf5Umq149KcygQsyeGj3Nu5 G4yiqPdpxCibLDbNpflayVPMwmRX1HuWXxmCwlFWjfzgeldVCiN/vsOun1XnuV0BSUZN7R KpWVW/c4s/wq8S4Ncug8jc21ZFaUBpQ8vXWBvL57qlgny6BXZsN/T1Xf7IVglbmfK6721z tqL8jlyegWkIFaQxp4mOqncKaIUMTItCUoAr5pQ72UUwT9DYaefYshhEBZ+bd9YPFOJQ1v qZworw0iu5g3Se0DyNPobXqjDn9n4kex9vif6UdlcZNR+2OidCUkMS8DDlKJ5A== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1671303333; h=from:from:sender:sender:reply-to: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; bh=lKKXJOtH81Nxky+4PgDivO30jQ9slzM0RDWljCDF8b0=; b=y9M3JHTZHNzx2WFkg+/bB3LzxJwSusq5tgnhr/tx9qVaucK2dRISUMy6ZqnACjyIy05C+e g8b8I8wzE3mfc0Ag== From: "tip-bot2 for Peter Zijlstra" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/mm] mm/gup: Fix the lockless PMD access Cc: "Peter Zijlstra (Intel)" , x86@kernel.org, linux-kernel@vger.kernel.org MIME-Version: 1.0 Message-ID: <167130333302.4906.13152896885964546282.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the x86/mm branch of tip: Commit-ID: 1180e732c985ed3c8866d2fd9e02b619848404a0 Gitweb: https://git.kernel.org/tip/1180e732c985ed3c8866d2fd9e02b6198= 48404a0 Author: Peter Zijlstra AuthorDate: Thu, 26 Nov 2020 17:21:30 +01:00 Committer: Dave Hansen CommitterDate: Thu, 15 Dec 2022 10:37:27 -08:00 mm/gup: Fix the lockless PMD access On architectures where the PTE/PMD is larger than the native word size (i386-PAE for example), READ_ONCE() can do the wrong thing. Use pmdp_get_lockless() just like we use ptep_get_lockless(). Signed-off-by: Peter Zijlstra (Intel) Link: https://lkml.kernel.org/r/20221022114424.906110403%40infradead.org --- kernel/events/core.c | 2 +- mm/gup.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index 4ec3717..b0d3842 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -7306,7 +7306,7 @@ static u64 perf_get_pgtable_size(struct mm_struct *mm= , unsigned long addr) return pud_leaf_size(pud); =20 pmdp =3D pmd_offset_lockless(pudp, pud, addr); - pmd =3D READ_ONCE(*pmdp); + pmd =3D pmdp_get_lockless(pmdp); if (!pmd_present(pmd)) return 0; =20 diff --git a/mm/gup.c b/mm/gup.c index fe195d4..ff8b223 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -2808,7 +2808,7 @@ static int gup_pmd_range(pud_t *pudp, pud_t pud, unsi= gned long addr, unsigned lo =20 pmdp =3D pmd_offset_lockless(pudp, pud, addr); do { - pmd_t pmd =3D READ_ONCE(*pmdp); + pmd_t pmd =3D pmdp_get_lockless(pmdp); =20 next =3D pmd_addr_end(addr, end); if (!pmd_present(pmd))