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 247CAC25B4F for ; Thu, 9 May 2024 00:10:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 588F16B008A; Wed, 8 May 2024 20:10:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5393D6B008C; Wed, 8 May 2024 20:10:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D9C26B0092; Wed, 8 May 2024 20:10:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 203446B008A for ; Wed, 8 May 2024 20:10:54 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 9940DA11BE for ; Thu, 9 May 2024 00:10:53 +0000 (UTC) X-FDA: 82096926786.04.32C4DC2 Received: from mail-oo1-f53.google.com (mail-oo1-f53.google.com [209.85.161.53]) by imf03.hostedemail.com (Postfix) with ESMTP id B656220007 for ; Thu, 9 May 2024 00:10:51 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=sHyHqGs5; dmarc=none; spf=pass (imf03.hostedemail.com: domain of charlie@rivosinc.com designates 209.85.161.53 as permitted sender) smtp.mailfrom=charlie@rivosinc.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715213451; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=LZqIlWMGzBPFcGrSBngkQrJzMqDGPG9IZxXHGwlwCwA=; b=t3O+z5Rl/hMP1Ug9RPer3bOGO+5OR40UvKFUSzC+mCQ3s0+HqsxHKcqjg5b+QLhubj2SPh Dvs7yfOy/iBZ5t6VVhqoQ3KBh2T7ajhpcs7rNWIuwvZe1hZfyUii1Msk5iri1lbAcBi+n4 XQLz12A4PsbNIsM37uUoIub7ByC/etQ= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=sHyHqGs5; dmarc=none; spf=pass (imf03.hostedemail.com: domain of charlie@rivosinc.com designates 209.85.161.53 as permitted sender) smtp.mailfrom=charlie@rivosinc.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715213451; a=rsa-sha256; cv=none; b=siRl9e37NqJcSCNynZ+Mh87cHlNZIolYwUmygCL9kjraEONbwq4LNhpNb52QEG6KesSjRL FIQRmJczMQ3pQrRMMHrQ7juRdIgIhQkXIWsLD3XnWw9mizEUCK55n/ACPztyeSjX/ltn1p fRR91tGSGhCQxUO71iJSXZxZmt7k+iA= Received: by mail-oo1-f53.google.com with SMTP id 006d021491bc7-5ac61cf3fffso144092eaf.3 for ; Wed, 08 May 2024 17:10:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1715213450; x=1715818250; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=LZqIlWMGzBPFcGrSBngkQrJzMqDGPG9IZxXHGwlwCwA=; b=sHyHqGs5fCQbviLfHh5xp1HvXqSjjRS/VyUjmzAE8w1EHMX3wyTVaIkYDIyIRbjC1v JwxDEeSbTbO/IaoGc/G90xDmYUxRGC6MQoGWDd7lYpINdYso5I6KzTk5laMr+JvrLkPe naUpvIs6kcw0R//0nzf9uGBnDGudraYd1GO2Dd6eG7hnWWinnec6oiKupZkvpy+u4V5n J1hP5NRliX/uTL21oBav7hFSsC/Z1bJbmACDGf+KDZssX/+5dZzmlyrKoF6m2XNl1/jR a0cM767G6D5SYkIYtYcpW4wJOnlqyYv1sT3zwE5IdDXMNdyM5/BC7GHi1bJ3K62Iv3PC n9qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715213450; x=1715818250; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LZqIlWMGzBPFcGrSBngkQrJzMqDGPG9IZxXHGwlwCwA=; b=jbKzyvMz13O2Bi9kWWpcefQW5VACUta0vqkL1XAaU5NJtDp+hBgrJGn+bprht9t/5q ugg93vC8L8x7/nkbbzPNTUidr5qhlCErFZ0wYAKvxbQPG3RL4fIhIYs+g9+V9kKLg9uT W/Se9ajU2X0gWJ615wczUp9MnqCfDrocouVgykRO22RT8H7JRdDOm99JB5qPIiKAaGdN YsKduqYOZEtJSma2G/92LcPzixEQ6iPUSQkglG+OSeoxifKQy2Oth3Q4n3i/snaTizLr UxPFrRCZYfqNkqPW4Cba50RUD3ygLdc3+CdqQJgy1C8dl+Wuvby1CE6NY4TqsiaiwJjt e6fA== X-Forwarded-Encrypted: i=1; AJvYcCWNp3L+RzFfmlMuS9frZu/V6zBmQ8vDH3HSj/8+JqnGEDiJvwQX3YJdRbnKZc89do4lzfiU/9UoOBKuh7F98podYiA= X-Gm-Message-State: AOJu0YxIrnfChYV0Lk4OTD7RVKf7n3ERvnG/osevVGUEvot/clvhwRJN nu3MGLjVUsRlvpaBEuTjKqQvBHsAHMzF4TkuI1XQdTm1Q3ULF6gEHX1HKeSW2R4= X-Google-Smtp-Source: AGHT+IGf3JRzZDV8fYaLM87bNAbWYV5rWVExMXqYWMFb1yCMw/X1461/R98MMrR2NY4Y0ojK0sDDKw== X-Received: by 2002:a05:6358:785:b0:18d:9114:eb1e with SMTP id e5c5f4694b2df-192d3778875mr506366755d.22.1715213450408; Wed, 08 May 2024 17:10:50 -0700 (PDT) Received: from ghost ([2601:647:5700:6860:4144:6911:574f:fec1]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-634103f727dsm81409a12.72.2024.05.08.17.10.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 May 2024 17:10:49 -0700 (PDT) Date: Wed, 8 May 2024 17:10:46 -0700 From: Charlie Jenkins To: Deepak Gupta Cc: paul.walmsley@sifive.com, rick.p.edgecombe@intel.com, broonie@kernel.org, Szabolcs.Nagy@arm.com, kito.cheng@sifive.com, keescook@chromium.org, ajones@ventanamicro.com, conor.dooley@microchip.com, cleger@rivosinc.com, atishp@atishpatra.org, alex@ghiti.fr, bjorn@rivosinc.com, alexghiti@rivosinc.com, samuel.holland@sifive.com, conor@kernel.org, linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-kselftest@vger.kernel.org, corbet@lwn.net, palmer@dabbelt.com, aou@eecs.berkeley.edu, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, oleg@redhat.com, akpm@linux-foundation.org, arnd@arndb.de, ebiederm@xmission.com, Liam.Howlett@oracle.com, vbabka@suse.cz, lstoakes@gmail.com, shuah@kernel.org, brauner@kernel.org, andy.chiu@sifive.com, jerry.shih@sifive.com, hankuan.chen@sifive.com, greentime.hu@sifive.com, evan@rivosinc.com, xiao.w.wang@intel.com, apatel@ventanamicro.com, mchitale@ventanamicro.com, dbarboza@ventanamicro.com, sameo@rivosinc.com, shikemeng@huaweicloud.com, willy@infradead.org, vincent.chen@sifive.com, guoren@kernel.org, samitolvanen@google.com, songshuaishuai@tinylab.org, gerg@kernel.org, heiko@sntech.de, bhe@redhat.com, jeeheng.sia@starfivetech.com, cyy@cyyself.name, maskray@google.com, ancientmodern4@gmail.com, mathis.salmen@matsal.de, cuiyunhui@bytedance.com, bgray@linux.ibm.com, mpe@ellerman.id.au, baruch@tkos.co.il, alx@kernel.org, david@redhat.com, catalin.marinas@arm.com, revest@chromium.org, josh@joshtriplett.org, shr@devkernel.io, deller@gmx.de, omosnace@redhat.com, ojeda@kernel.org, jhubbard@nvidia.com Subject: Re: [PATCH v3 01/29] riscv: envcfg save and restore on task switching Message-ID: References: <20240403234054.2020347-1-debug@rivosinc.com> <20240403234054.2020347-2-debug@rivosinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240403234054.2020347-2-debug@rivosinc.com> X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: B656220007 X-Stat-Signature: zpr3azb44uncogbg1eu3objrx3anqjdx X-Rspam-User: X-HE-Tag: 1715213451-201119 X-HE-Meta: U2FsdGVkX1+QYFzlKUBoDzvibATCyh6312F6KqcHwAp4FUReQw7RC0PTiPw1lMWF+Za1j4gBXgmJexX1HkNDTWUxs85R8SDbxvI/u5jt1zrIPvaAe8oliz825YLQ4dCLtWaZR5c/a3ruDP4FJO+ILDib1sFHKcEclheLOwSPAzm/89FuJRVhjBI+reeQi7EwJrDF4nFXxu4zRR+7nc1mrnLCzOCutyvlYsV7QVi0e33duufH4PdGg2rRE0te5WvpxLYY786EyFpy2eJ31I4DXJxFDWLeondf2mRq5yuLjc5utKsxDS37iw6Awq+oSgUZgKxOrNY4WAqNEbVIBGn2LmSYLUsBin6MBaj8Va027wC5S5YI2zJBiSsneck32mCm0donx6b5gB8BbxnHzvUYBE12qdRXYTbdVQXjOolQQtkRatDoeWz9nN7GCukPvhuHFN32ks5ixPniAi/7k41NYcL2BlPvD6krld5vsTDDmNXv5yc2u/4BvdtSR7YvHUZMi+QuX8YtfEZpY4+aTspyrS/TEELs/n42a3wlCOD1thWHWXP7WeJYq9fWV+tGrj7m78GUDXtCVcSVvwRRc3el8zHEhkvxfruKOdccaR+TXnw0CWTFsWr4Kml2Mka0cTOU0o0ckqtB1UyApGFKeeAhzpW9x5ogbcVjW11zVaSHmOKyefNKgkoecWqgqMjsUn3nieUrFqMeFrJIOXNXCQwOIHydiAQ69MyuhgMIeGR5A2N3McqMFg74pVt69YmapsJidPsFzrwB+Wc7pN5xWAL5qSseIgUzyX7tGO2XC88wtHF2J5LkGeCESLZ85Axsx3bZ9+rvKPKcVwyqoCJnaV22WYjY/VW7iIjc87S+lG2LDv/uL1kvFSkdi+boS0SOHGsGT+bVKgq07Hmpdr3SVL8U+wNS9rG5c1LwFBjmuCLSrJZFrX5oIY+tkvcgTzT1NDbFgZJ9BaC3R8AQzHa23qm gImQ9okP f+9Xj7FpoZHgyqj5mcfPz/oipPFAu9B9XcEq6X8XxC80YXkKzcQMlWAgg2M6G9N//DbrLvImhryxVqETgt9jjwdVgSFqeDqWpSrKhtVDxNPnX6ZKoKiMWH2oPb0v54wSsHzySa9kRNeIp70NzkUPgZdUd9PtSfgiR8yphLSXAZrx0qxuVog4yQNB6uPKidoLr2+RETe/e/360fUs89O+G2/zCyD0Y8t1PM8UGQkFSNhSgyjwv7jvWZEsxtbPHTmrsVyTpLgwHvAVk/HxaCdAGTN2mSloIHY/qmD+8oQbErg6LMfQmgLI6orX6VXxaIVSZ/ZEO819lr8nTw7J9gIkxJMA50gE/nfRlgE/OyMfH1Ipi67U9h3MKbInTolbnkLs8vjBPFU5w/tj2lYEHmEW7MbzKSkVSCmvZrRhZHG2VRjBAU9cBTqdf25+zsGEv8D8U7zUgZBT8xqNWJRg4ef+8Bmq+DVqYzA6wQnGa3n+d1L57anCFj9i5xhQmGb5gZZyWhT9RBU6N7JbkUEJyBUP3Kh1nDv6fpnASVFg48Nebj1Zyxo3DBaY5pEGlTj2WhxuDXVlz X-Bogosity: Ham, tests=bogofilter, spamicity=0.000013, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Wed, Apr 03, 2024 at 04:34:49PM -0700, Deepak Gupta wrote: > envcfg CSR defines enabling bits for cache management instructions and > soon will control enabling for control flow integrity and pointer > masking features. > > Control flow integrity enabling for forward cfi and backward cfi are > controlled via envcfg and thus need to be enabled on per thread basis. > > This patch creates a place holder for envcfg CSR in `thread_info` and > adds logic to save and restore on task switching. > > Signed-off-by: Deepak Gupta > --- > arch/riscv/include/asm/switch_to.h | 10 ++++++++++ > arch/riscv/include/asm/thread_info.h | 1 + > 2 files changed, 11 insertions(+) > > diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h > index 7efdb0584d47..2d9a00a30394 100644 > --- a/arch/riscv/include/asm/switch_to.h > +++ b/arch/riscv/include/asm/switch_to.h > @@ -69,6 +69,15 @@ static __always_inline bool has_fpu(void) { return false; } > #define __switch_to_fpu(__prev, __next) do { } while (0) > #endif > > +static inline void __switch_to_envcfg(struct task_struct *next) > +{ > + register unsigned long envcfg = next->thread_info.envcfg; This doesn't need the register storage class. > + > + asm volatile (ALTERNATIVE("nop", "csrw " __stringify(CSR_ENVCFG) ", %0", 0, > + RISCV_ISA_EXT_XLINUXENVCFG, 1) > + :: "r" (envcfg) : "memory"); > +} > + Something like: static inline void __switch_to_envcfg(struct task_struct *next) { if (riscv_has_extension_unlikely(RISCV_ISA_EXT_XLINUXENVCFG)) csr_write(CSR_ENVCFG, next->thread_info.envcfg); } would be easier to read, but the alternative you have written doesn't have the jump that riscv_has_extension_unlikely has so what you have will be more performant. Does envcfg need to be save/restored always or just with CONFIG_RISCV_USER_CFI? - Charlie > extern struct task_struct *__switch_to(struct task_struct *, > struct task_struct *); > > @@ -80,6 +89,7 @@ do { \ > __switch_to_fpu(__prev, __next); \ > if (has_vector()) \ > __switch_to_vector(__prev, __next); \ > + __switch_to_envcfg(__next); \ > ((last) = __switch_to(__prev, __next)); \ > } while (0) > > diff --git a/arch/riscv/include/asm/thread_info.h b/arch/riscv/include/asm/thread_info.h > index 5d473343634b..a503bdc2f6dd 100644 > --- a/arch/riscv/include/asm/thread_info.h > +++ b/arch/riscv/include/asm/thread_info.h > @@ -56,6 +56,7 @@ struct thread_info { > long user_sp; /* User stack pointer */ > int cpu; > unsigned long syscall_work; /* SYSCALL_WORK_ flags */ > + unsigned long envcfg; > #ifdef CONFIG_SHADOW_CALL_STACK > void *scs_base; > void *scs_sp; > -- > 2.43.2 >