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 100A3EE57CC for ; Sat, 9 Sep 2023 20:17:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8B88A6B0120; Sat, 9 Sep 2023 16:17:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 841136B0121; Sat, 9 Sep 2023 16:17:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6BAEF6B0122; Sat, 9 Sep 2023 16:17:35 -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 5D32E6B0120 for ; Sat, 9 Sep 2023 16:17:35 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 2A8EB1206D5 for ; Sat, 9 Sep 2023 20:17:35 +0000 (UTC) X-FDA: 81218169270.29.3F631C4 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) by imf15.hostedemail.com (Postfix) with ESMTP id 1650CA0016 for ; Sat, 9 Sep 2023 20:17:32 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=sholland.org header.s=fm2 header.b="v MGC/yq"; dkim=pass header.d=messagingengine.com header.s=fm1 header.b="V /6Ptmb"; spf=pass (imf15.hostedemail.com: domain of samuel@sholland.org designates 64.147.123.20 as permitted sender) smtp.mailfrom=samuel@sholland.org; dmarc=pass (policy=none) header.from=sholland.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694290653; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7NXnmFYFmr6Y8hhtV6LxTtgTAxVz99Y/He8EwBOMTPo=; b=Jz+tQjXhx1Oj0nBKe4uJ6wRSJsRHIHLRnDZ7ht85UL1tbp0y26Y1GxK09DkHHr2BqW1tRP 2RktskxmbViaCxvzHDXUMWE8s3zRJ2di+JVla84/rJsJu8y3ikr+yjEDy9eULFw/xcbmbW htB8arLw8/78MA9xih5PJzyVbZzz1fk= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=sholland.org header.s=fm2 header.b="v MGC/yq"; dkim=pass header.d=messagingengine.com header.s=fm1 header.b="V /6Ptmb"; spf=pass (imf15.hostedemail.com: domain of samuel@sholland.org designates 64.147.123.20 as permitted sender) smtp.mailfrom=samuel@sholland.org; dmarc=pass (policy=none) header.from=sholland.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694290653; a=rsa-sha256; cv=none; b=obtZPwFAiwlpsMwfZtA/GgbuL59YLUQTQInksCAMJ5mAOE4GG1iQQH0wbhNPWtOUezINwR lWlmKUQytLeHQjCOaSsvGGIBMbuhBw0A5IOKv+9fsMZBT3M8KNXtkH9BeyQ2CyA8CVQVBW U7GAAELs0ayNiuf5a9OADFCyDrGLNcc= Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id 53337320090E; Sat, 9 Sep 2023 16:17:31 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Sat, 09 Sep 2023 16:17:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sholland.org; h= cc:cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm2; t=1694290650; x= 1694377050; bh=7NXnmFYFmr6Y8hhtV6LxTtgTAxVz99Y/He8EwBOMTPo=; b=v MGC/yqEpNIdjgRMas1jOpQX+RGuER3w1a9LX7DRtbX3YU/zuvaZQ6lNCqgC5uN3u +WX7QnEdXIsb6GU2zk0Fq6WqIhS9vF4GMjrvaQthRv21wcMpyMuogSqMZpRH65A4 ikNYD/4Ya6H3nKwcWxOFq2m2+CIOhkHPIOMUEMAaQaEQzmBDjk3eYR2Cm9lxdwAM Bf0Y4WrP+rxWWli4eqa0N2OMzHBwgJIIb06Z4fHo0Wjt0pjAhXAclM5363cBvuIJ dVIyEreE8ynOQTiWVp73D9Vlp/vxjklgg+hjVQKJNpBN1zOzdmXUfuj28u3zFde6 0ARU84BJ1h6BjreTvI7hw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1694290650; x= 1694377050; bh=7NXnmFYFmr6Y8hhtV6LxTtgTAxVz99Y/He8EwBOMTPo=; b=V /6PtmbbrFsuIPtof2CD8rYJbN8SW8zFJs5B3F1yVaeB/EqxlRcGpakegQduTcXFf wSIkvVrmCEmsjz84lWiez9t8xrXMOpE+l7K5d3o8XLvRcEmDlcZKlRmF+IfGUFtT QDFb0L7Pm0baBvnwqSvUn5jhoeJjGS6ifeXG1Am8mpFsnshwMkgfruTNH/7INHdC hSgmCO+CZdE0Mvud4b5FpStlebpmjkVmy4FMOZtL0k2pgsXO1EjAXQDSHEtgAzNv P5xxWSFJfWyEDjXDo+0/euINs2raDRN16uSY1G907a004+eyFYLMVowcmZMDaK7m sUNogkSv3rR3eNzMLMXRw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedviedrudehledgudeghecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefurghm uhgvlhcujfholhhlrghnugcuoehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhgqeenuc ggtffrrghtthgvrhhnpedukeetueduhedtleetvefguddvvdejhfefudelgfduveeggeeh gfdufeeitdevteenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhg X-ME-Proxy: Feedback-ID: i0ad843c9:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 9 Sep 2023 16:17:30 -0400 (EDT) From: Samuel Holland To: Palmer Dabbelt , Alexandre Ghiti , linux-riscv@lists.infradead.org Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Samuel Holland Subject: [PATCH 1/7] riscv: Apply SiFive CIP-1200 workaround to single-ASID sfence.vma Date: Sat, 9 Sep 2023 15:16:29 -0500 Message-ID: <20230909201727.10909-2-samuel@sholland.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230909201727.10909-1-samuel@sholland.org> References: <20230909201727.10909-1-samuel@sholland.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 1650CA0016 X-Rspam-User: X-Stat-Signature: 7f44ki4ia46ht3qosn1gfghuwmjng4fj X-Rspamd-Server: rspam01 X-HE-Tag: 1694290652-77398 X-HE-Meta: U2FsdGVkX1/ZNuWZxhDecoScFwoDyAFAxjD4kYbqMvRlF+fe1ASmynk11p4a5toP/js/G7+E1LVHqxFKU6g1zB4RaIDNvICyMGJ7ZUenZV03vuyPVX6HLzRjDuTnzbsYcnWFwbrvNaHhL2YvsW/JbieZ5fbhUpFQZbuvSV3ysAdo8BGUJwZrWQt6HDSpHLy+9eYXLotefxld40836hTOjTaggAFfK6J9+NTLH9Mki4Tru1UYwhIoyLVqFKUtXozVR76nF/9MdOuR1u0DO4byDbFHZZ+XDqDXCD3xh1s4DRQ1XskEPU/CmWFrPu2pr97Yq87cm62xCmzuDgJx9daVDzt8USWnr9iN7DUTrnmQXBm2xeBOeF+6AmWk5If5Wd+ohU1sG+gjN3TlyavrWaggk4ORDTkDZ7qXZv5o1qcKTLIDaJe+C5c2V3gfTmGOHGntlqBXqh6z1OQbmWkuH6AfdiJK+BMakM5Zt6PgrNl8cn1WA6Sucfla5YYkUcky1D/XBi49ExL7OODLrMMJ7lTlIH/hV4Kj7CqZyFh84nQA/KeiiJcOuqxSSyYQ/UpAi2TxkrufV/+LehFSu1NOs8YRtHMf3kAeaT6KQWPz2N5PLtDsyEJOMxvmxMuKrKD5PR9i4PP3iW1raIqoWgTaGxpMhdIMsS7QnXuWhIDEavLAT12h9lt2EqiGT/Dsl0j9YovIbq3Sa7UmUvA55BQztMD7LZw4xZ1sX0DW2BM3fvoQVQGd5AB9OTzFlX5RYVe8J1A77g6cV+2+aOKKl4qXmEOJpqjYYyRynr8v/squMw1Cyn0xkFy4xecApyrXLiZAn5UTdtACJIcLHLljHvrWgPf5G2eG/Zixhl7tVP4m2tmctbyvDyRKHxrKiyHsrIGHF1GmXbCzinGVlb9w1SGJTXY+J+owfooEyR6dzAahmqmKYMu0s2f8o01/cv7SR2H3PUaVHz5vPVN2dNTUV6SixK0 IAy5fW/V 5eVpABxNh72RssjO3mTpVCp8Pty34niLE2K29W7OSiulzP1R5z2qxpbkpP/vju6YPuOAJ0o9qu3Si6LxsFsWD5a8pwF2kgtgua+6enJjPxbmyK835pF9lktRlw/yuG5bwGiptKqO1GIFJwdLahZ/MBbPTFvtRQBhQ6FpAyNqOMsAxTEx6Ys6lsfv0uPoH/1Xzo7poeN2vTqGztTfeBfkfTTsnEo5XLXW1MKzPuYYxKvpTqAqBjw1D5TWsue/5UQ4/OLQrxfjOsXAyLiWpRwVupqVsIXLlR3q7pC/GOICQW3HHX69flJ6tTCmia58skybMG1Hn 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: commit 3f1e782998cd ("riscv: add ASID-based tlbflushing methods") added calls to the sfence.vma instruction with rs2 != x0. These single-ASID instruction variants are also affected by SiFive errata CIP-1200. Until now, the errata workaround was not needed for the single-ASID sfence.vma variants, because they were only used when the ASID allocator was enabled, and the affected SiFive platforms do not support multiple ASIDs. However, we are going to start using those sfence.vma variants regardless of ASID support, so now we need alternatives covering them. Signed-off-by: Samuel Holland --- arch/riscv/include/asm/errata_list.h | 12 +++++++++++- arch/riscv/include/asm/tlbflush.h | 13 ++++++++++++- arch/riscv/mm/tlbflush.c | 17 ----------------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h index fb1a810f3d8c..6e416297847c 100644 --- a/arch/riscv/include/asm/errata_list.h +++ b/arch/riscv/include/asm/errata_list.h @@ -39,11 +39,21 @@ ALTERNATIVE(__stringify(RISCV_PTR do_page_fault), \ CONFIG_ERRATA_SIFIVE_CIP_453) #else /* !__ASSEMBLY__ */ -#define ALT_FLUSH_TLB_PAGE(x) \ +#define ALT_SFENCE_VMA_ASID(asid) \ +asm(ALTERNATIVE("sfence.vma x0, %0", "sfence.vma", SIFIVE_VENDOR_ID, \ + ERRATA_SIFIVE_CIP_1200, CONFIG_ERRATA_SIFIVE_CIP_1200) \ + : : "r" (asid) : "memory") + +#define ALT_SFENCE_VMA_ADDR(addr) \ asm(ALTERNATIVE("sfence.vma %0", "sfence.vma", SIFIVE_VENDOR_ID, \ ERRATA_SIFIVE_CIP_1200, CONFIG_ERRATA_SIFIVE_CIP_1200) \ : : "r" (addr) : "memory") +#define ALT_SFENCE_VMA_ADDR_ASID(addr, asid) \ +asm(ALTERNATIVE("sfence.vma %0, %1", "sfence.vma", SIFIVE_VENDOR_ID, \ + ERRATA_SIFIVE_CIP_1200, CONFIG_ERRATA_SIFIVE_CIP_1200) \ + : : "r" (addr), "r" (asid) : "memory") + /* * _val is marked as "will be overwritten", so need to set it to 0 * in the default case. diff --git a/arch/riscv/include/asm/tlbflush.h b/arch/riscv/include/asm/tlbflush.h index a09196f8de68..e2960c9c16e8 100644 --- a/arch/riscv/include/asm/tlbflush.h +++ b/arch/riscv/include/asm/tlbflush.h @@ -19,10 +19,21 @@ static inline void local_flush_tlb_all(void) __asm__ __volatile__ ("sfence.vma" : : : "memory"); } +static inline void local_flush_tlb_all_asid(unsigned long asid) +{ + ALT_SFENCE_VMA_ASID(asid); +} + /* Flush one page from local TLB */ static inline void local_flush_tlb_page(unsigned long addr) { - ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory")); + ALT_SFENCE_VMA_ADDR(addr); +} + +static inline void local_flush_tlb_page_asid(unsigned long addr, + unsigned long asid) +{ + ALT_SFENCE_VMA_ADDR_ASID(addr, asid); } #else /* CONFIG_MMU */ #define local_flush_tlb_all() do { } while (0) diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c index 77be59aadc73..115d617d16c9 100644 --- a/arch/riscv/mm/tlbflush.c +++ b/arch/riscv/mm/tlbflush.c @@ -6,23 +6,6 @@ #include #include -static inline void local_flush_tlb_all_asid(unsigned long asid) -{ - __asm__ __volatile__ ("sfence.vma x0, %0" - : - : "r" (asid) - : "memory"); -} - -static inline void local_flush_tlb_page_asid(unsigned long addr, - unsigned long asid) -{ - __asm__ __volatile__ ("sfence.vma %0, %1" - : - : "r" (addr), "r" (asid) - : "memory"); -} - static inline void local_flush_tlb_range(unsigned long start, unsigned long size, unsigned long stride) { -- 2.41.0