From nobody Thu Apr 9 03:11:09 2026 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 DE9A8C4332F for ; Wed, 2 Nov 2022 09:14:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231483AbiKBJOE (ORCPT ); Wed, 2 Nov 2022 05:14:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231393AbiKBJMx (ORCPT ); Wed, 2 Nov 2022 05:12:53 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 61B0E28E18; Wed, 2 Nov 2022 02:12:42 -0700 (PDT) Date: Wed, 02 Nov 2022 09:12:39 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1667380360; 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=RT8L0UGb4JToLrqr1SrWn3MXpnb+J9vu9IfgZDz2iTI=; b=RxmPFjaCarVAMF5rWqg6bbQCmE/Nn+SNQJhSXevJgzkcWeOXQQMz7aeNCP9rfMnsGZ1p8p t+/oc+rkPnv/n+qHkX/dHUKwxMr8NP6Hp9ipZSobeBv0E1/di/6G7ULXoFtfYN4Q9O8Rk9 ta7hHU63Nfi8ChIIw3iPovucWU8EorZ68t0nnzvzZRXIVYSVkxltgWzBZ+XlyMFGC4vDLG K/ji5MiNh085zwXaEddA63WjL8Va6xPZxU1KFeu1jvseHpgI3KiNwzAbpmghcP41pWZ01i yfXCc2LvbygCMVpqy3S+PeZqa1kfjyol4U83phqZ+lnqSpAVep8iN9LZmpI8Vg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1667380360; 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=RT8L0UGb4JToLrqr1SrWn3MXpnb+J9vu9IfgZDz2iTI=; b=WvdSmDGTsVes/NLOlw/lw11lVT0qch+xDbNrtwPs5cRDSkL2G2IOy/EVDaoEiRZ/GFELfx 8nyt01rTXdhVNgAg== 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: <166738035964.7716.5433885798359533434.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: 4fff2c7e6b8e91e00838b145d08353dd8a1893c1 Gitweb: https://git.kernel.org/tip/4fff2c7e6b8e91e00838b145d08353dd8= a1893c1 Author: Peter Zijlstra AuthorDate: Thu, 26 Nov 2020 17:21:30 +01:00 Committer: Peter Zijlstra CommitterDate: Tue, 01 Nov 2022 13:44:02 +01: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))