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 B6023C10F1A for ; Thu, 9 May 2024 19:00:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E14C86B008C; Thu, 9 May 2024 15:00:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DC44F6B0093; Thu, 9 May 2024 15:00:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C656A6B0095; Thu, 9 May 2024 15:00:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id A89046B008C for ; Thu, 9 May 2024 15:00:45 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 4A7C51C19B3 for ; Thu, 9 May 2024 19:00:45 +0000 (UTC) X-FDA: 82099774050.28.A41AD83 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by imf13.hostedemail.com (Postfix) with ESMTP id 33FA520006 for ; Thu, 9 May 2024 19:00:43 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=utG4E3VH; spf=pass (imf13.hostedemail.com: domain of debug@rivosinc.com designates 209.85.210.171 as permitted sender) smtp.mailfrom=debug@rivosinc.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715281243; 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=suVrTFWe4Q9EJfAXikAfGsbIG5FwHp88I8wjDmo5qhw=; b=Jrlp7VqQCT6u+ZcFqo9jfQrMTTNydNZY6OqKWz/bn5YDOZotLgfG16UqVpl41sZ1AEfboJ kfLNumN3tlZVLhQDiBJm2YRnoFnIJnnDsLwTAHPwphnl1x7LYHd51HBz1r1nw/YiSH3Av7 BfPzl+ROMSM9xo7IOpv1I1SUItZWZ7s= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=utG4E3VH; spf=pass (imf13.hostedemail.com: domain of debug@rivosinc.com designates 209.85.210.171 as permitted sender) smtp.mailfrom=debug@rivosinc.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715281243; a=rsa-sha256; cv=none; b=ULkLztgS1pgPFuWKfpC7F8ln1MdTXQKFZzXT2kDdE3EcX1iCVtAi2JgANaVnryi3ELzFk0 beNcSTT1qCfARuCTGy+Xt+u/6nuvnPqk52SeNVREO4turl28D9Ru4DWftN+RzJ0c9CkjXr Jmi+YYuJxvpaJOYjlpb70Urnp/POAdE= Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-6f44bcbaae7so1116378b3a.2 for ; Thu, 09 May 2024 12:00:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1715281242; x=1715886042; 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=suVrTFWe4Q9EJfAXikAfGsbIG5FwHp88I8wjDmo5qhw=; b=utG4E3VHliIehaImy0Snsdy7P4MIumSS18kMrG6Uc7MgYw28C1AnNe2re2Wb+bGQNe xpEIZ2W+eYT2TemHMXnZoD+KccJGPBFsSh92m/EMkU8JakqouzNYovqlvfoLKVzbsXOv 1GpvVnvjeoCU/iKsP6g90el+f2DvDNvVGciGxIhR7Q2Vy7uSCT3WWuKIUVlBoOFWd7v7 rOoMvn1qW61M0Qvyc3qwrf6D4fHnKt+ztzWPG9aN5coOb/5sYioRnBvYi2zCek+7pks2 EDaC2n40GnnPkOVVN7fci/FbvTQZQ90V3Do7uzd3ZLX/EO+clwmNaA9AVFDgt7dmI/an n7ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715281242; x=1715886042; 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=suVrTFWe4Q9EJfAXikAfGsbIG5FwHp88I8wjDmo5qhw=; b=WVEoNOdm+UNI6wYZ67amWGZW1cBEAKT20rfB7tUkUdcXS/VemnCkEtqeG9wUR6MM/E 0NCdSA+pGEoEELshOppltNqcm/HR+TN4uWwL7412CkO9h5A5IVy7GSItujf/zdX/Y56T Yb5T71wxelEQGKB06zal36j3pFYxrV/b7pKrH1egCuznwTd2FLdnTWqdOY23j7lkObVp ZpJqOaa2yaNHR0vrcPeEBup4kRYk/4jF3VVVU9y+eCC23jgxVbicA5BU9iQrNTWz6R4m Rnp97nnAPoPntpOh7BQuHqmg0+93Q799gOXuXgkmq9wYdb9/Tb9QsuPmvjEFrFQ9WYVj H2fg== X-Forwarded-Encrypted: i=1; AJvYcCX7LiOnkpTEe0WAKTC0KJzN05qinmO+BFZOLQPjLZ27BHaSx8Klk98B88CbOQJ9Tz2PKYOoGTG7u5zOhS+OOAwkY4k= X-Gm-Message-State: AOJu0YyG5eUgb6UoUVy1ov56kYD7FsIIuMufgWa8x9bsWLCTKBb4xkgY ojYp3iYhR70aUouOiZWmFYIhHwdgrv0tGRcEEjTMbQWraHxkqPSPpkEO84bpawE= X-Google-Smtp-Source: AGHT+IHE3J/hwAQsHqywRim+p5Loya/dtj3SbYe2Ez8JQSaJRUzBly/edfRtpEMzoFQPu7m0vRKdfQ== X-Received: by 2002:a05:6300:8002:b0:1af:62a6:e2 with SMTP id adf61e73a8af0-1afde1fb753mr598976637.56.1715281241943; Thu, 09 May 2024 12:00:41 -0700 (PDT) Received: from debug.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-6f4d2a6654asm1626451b3a.43.2024.05.09.12.00.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 May 2024 12:00:41 -0700 (PDT) Date: Thu, 9 May 2024 12:00:36 -0700 From: Deepak Gupta To: Charlie Jenkins 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; format=flowed Content-Disposition: inline In-Reply-To: X-Rspam-User: X-Rspamd-Queue-Id: 33FA520006 X-Rspamd-Server: rspam06 X-Stat-Signature: cj5tzajjmctymrb8sk7ohzobcqcwj38n X-HE-Tag: 1715281243-476888 X-HE-Meta: U2FsdGVkX1/aGnpFWxRSrlSvzqXthijoICBw64fYgRvFZNbPcYgcKcRodFfu1g46RCiRzPHGwTZEbyoMvuKEiNISjnXtvy5TOqUyvTz6IQZuj2NV+HS7iRy60dudJgMsbBkb90LOMpUbpktuSFAFYzFQ5jfHlZoJ1b28jcAOFfUj6Jn7vH0OXFmBMcRGhx1ZZShcaLGIIscjo2KR7XU0cZB7UeHl8MpQdfd0bICN4f2nBG10yP7ms6044Ecyv3540oAY0mwZ74M80+SSk6pLeIJ5nVJS7+8nEaca4IQeL3r+xl7SBgEuOaj7AW/Hq1q7hc68l46W7pXAYR8V1d8dbKQBqZjqUC0Zt+vYrzY57SkdJtJG2A2licvIdBwQRXzVxJRSiRkHghdki4SP/sw3YIn3+LIOl6HLs7j7xb5pLLTFBesnIiqBIipbNdG1clU0FtCU2MvPoIhtOjcMxhmgy1flAWlJr9p6SoMLJtlK18R7IgE32wjX4gj6beVEjUSRtuy/ej3xhCjvng1LNGOimSy/uYh6GIUT5xkXEEmitu4RVMXiZ4CDolyraZ9sTZ9ljTfEg5uzlQGqy9F+CDD3mjZy9e9xdcLyc/QjpoCzYvzX/1cOBpeZgBCnOcR8FhxuBYMQCnPNs+WkmHir3sj8bPd1w2cLHWf52VORHABdwkfcrdFwdtw1dcQB057CPgjmfy0LJLzt/6iTR7BBAydPPU0kNdlCCzwhPt2x/w6zdg3C3Iyhfi9qyjBOFbpgrzNiEG4EMzqmW63/cnygGC1F7K2k6015R+/Nu6tJNv94eAw52D54Ab1s6fR4NIKjPb1a8jXIQ5fMbNshVGDi/+6YXBIDzuIu8po7NjsMVKqslfTB2FDO8ujio4ItvHeUqCjIrWlT+5gZoY4e2wiKhkKl+mwds0RUy+Ntm8g8/M9ZLRdmI4ogxk4bIYW6RzzkDpyAPVLVbF2APrrVFgbvIZg or9fjW1l TLdMjaTOCA6ED5GUld0jwAilXoiEnamLiL7/bO6Vounj2rDeW/Jd0g5kfIwbNQl05zN5In572LvekVRnMS8S0Dc3J0PBG+XOg9mgRaOKatWrmQKUIyYKir5F7exm5jP9NwO0zEE8A4xrI24V+u1ANGS1jW/q7DdKc05/luotLzL3zuNqncqJxr2HPB1FVHdgxTSOfo+yKEoPutVq7buYQa6uxZzrW7K2OEI2OdlR0bQVWBoEV0mwKl6tGj6enqFHOwpSZKTdl+vvTnhdXDMF2jHodbhb7fCT4cp/qgjcNEidTfbnhTYsJyCEONnPWYwIoL1Biplz/dc8sb2OX4fOU+XVdr28NYFWlvW9tn5p6xnNBjRefI/IRutNUe5BqMVxmksIK6XAClfPLVHZQClN2YHQgXWucu6KXMF0341uXXIFA3rWI3qbey2lo8pACNshD4fNN21xMGNurFBEkYZdY8ayd+RhApU37S5UwFFuUo5RwLOrb16b34HYV9dtSxBvvXMNMKreOqQZApiiUNvfckllztyfbnY8VM5LC8ea62z4nn9Tj0s59r3Md5b7TUX7NBNBUyyjPSKzGJeQJ3HhhynalSvz4VvHZdwYnHtQE0J7AYW7ZH/DDrhe9Csm3TN6t65vp00lX2OP1aNUeko9e7mHXtg== 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: List-Subscribe: List-Unsubscribe: On Wed, May 08, 2024 at 05:10:46PM -0700, Charlie Jenkins wrote: >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. > yeah. will fix it. thanks. >> + >> + 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. Yeah looked at codegen of `riscv_has_extension_unlikely` and I didn't like un-necessary jumps, specially in switch_to path. All I want is a CSR write. So used alternative to patch nop with CSR write. > >Does envcfg need to be save/restored always or just with >CONFIG_RISCV_USER_CFI? There is no save (no read of CSR). Only restore (writes to CSR). There are pointer masking patches from Samuel Holland where senvcfg needs to be context switched on per task basis. https://lore.kernel.org/lkml/20240319215915.832127-1-samuel.holland@sifive.com/T/ Given that this CSR controls user execution environment and is per task basis, I thought its better to not wrap it under CONFIG_RISCV_USER_CFI and rather make it dependend on RISCV_ISA_EXT_XLINUXENVCFG. If any of the extensions which require senvcfg, then simply restore this CSR on per task basis. > >- 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 >>