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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8A832C3DA49 for ; Thu, 25 Jul 2024 10:37:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date: Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=bgGV/eQ/zn3rQCABPb+uBTaeFhzHyZ6E3CDecDL14k8=; b=YGogcyaKNjSI4+0pLbCRhE8zDB l7aSEQBI1OhrECOkrZY9cUuuHlUteKPKqy2til1Yd7BFwGNWcWyrvl4CPPjB22auze8t17Yb7ztob +3AgDbxQhY7RdihF/7sBzLsTwduceJHN57B4S3mcZfxWMdypIcp8Fvb3obtiXzUtHsvfSoCECyQUy iyR6LHqcP0RcJ5WikZgkwMS01WEGHkB0jhCFCyEpQYiXNIQ9+zlLBxEQyZS6tkFzR2cQqfPtHn9Uu j670cl2NVidiBa/xvwC4yH0SK5aQKVAU1//usz6u25iPjv5pACAe8xlmKDPTodR2EEJ60OkkYxtDr 7AlvJQvw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sWvqg-00000000dlB-3pbx; Thu, 25 Jul 2024 10:37:26 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sWvqH-00000000dfW-3qEb for linux-arm-kernel@lists.infradead.org; Thu, 25 Jul 2024 10:37:03 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0AEF81007; Thu, 25 Jul 2024 03:37:24 -0700 (PDT) Received: from [10.1.25.164] (XHFQ2J9959.cambridge.arm.com [10.1.25.164]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B9B533F73F; Thu, 25 Jul 2024 03:36:57 -0700 (PDT) Message-ID: <3e82687a-0183-42f3-b32c-6d99dbd4fe49@arm.com> Date: Thu, 25 Jul 2024 11:36:56 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] arm64/mm: Avoid direct referencing page table enties in map_range() Content-Language: en-GB To: Anshuman Khandual , linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas , Will Deacon , linux-kernel@vger.kernel.org References: <20240725091052.314750-1-anshuman.khandual@arm.com> From: Ryan Roberts In-Reply-To: <20240725091052.314750-1-anshuman.khandual@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240725_033702_032667_977BB835 X-CRM114-Status: GOOD ( 18.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 25/07/2024 10:10, Anshuman Khandual wrote: > Like else where in arm64 platform, use WRITE_ONCE() in map_range() while > creating page table entries. This avoids referencing page table entries > directly. I could be wrong, but I don't think this code is ever operating on live pgtables? So there is never a potential to race with the HW walker and therefore no need to guarrantee copy atomicity? As long as the correct barriers are placed at the point where you load the pgdir into the TTBRx there should be no problem? If my assertion is correct, I don't think there is any need for this change. Thanks, Ryan > > Cc: Catalin Marinas > Cc: Will Deacon > Cc: Ryan Roberts > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Anshuman Khandual > --- > arch/arm64/kernel/pi/map_range.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/kernel/pi/map_range.c b/arch/arm64/kernel/pi/map_range.c > index 5410b2cac590..b93b70cdfb62 100644 > --- a/arch/arm64/kernel/pi/map_range.c > +++ b/arch/arm64/kernel/pi/map_range.c > @@ -56,8 +56,8 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot, > * table mapping if necessary and recurse. > */ > if (pte_none(*tbl)) { > - *tbl = __pte(__phys_to_pte_val(*pte) | > - PMD_TYPE_TABLE | PMD_TABLE_UXN); > + WRITE_ONCE(*tbl, __pte(__phys_to_pte_val(*pte) | > + PMD_TYPE_TABLE | PMD_TABLE_UXN)); > *pte += PTRS_PER_PTE * sizeof(pte_t); > } > map_range(pte, start, next, pa, prot, level + 1, > @@ -79,7 +79,7 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot, > protval &= ~PTE_CONT; > > /* Put down a block or page mapping */ > - *tbl = __pte(__phys_to_pte_val(pa) | protval); > + WRITE_ONCE(*tbl, __pte(__phys_to_pte_val(pa) | protval)); > } > pa += next - start; > start = next;