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 2A671C4167B for ; Mon, 27 Nov 2023 18:02:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9923C6B02C3; Mon, 27 Nov 2023 13:02:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 91B486B02C6; Mon, 27 Nov 2023 13:02:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 794A06B02C7; Mon, 27 Nov 2023 13:02:05 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 63D086B02C3 for ; Mon, 27 Nov 2023 13:02:05 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2D02B405DC for ; Mon, 27 Nov 2023 18:02:05 +0000 (UTC) X-FDA: 81504503010.23.D3C4653 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf09.hostedemail.com (Postfix) with ESMTP id 28111140106 for ; Mon, 27 Nov 2023 18:01:28 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="ul4K9Hg/"; spf=pass (imf09.hostedemail.com: domain of maz@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=maz@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701108089; 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=6Ull4V9GpzSQV8xia8vWnvMF6t7rsXnkLDwauY4Pbjg=; b=QtyCqzvUKUiXF80yz/yzpbvqq7cgi1v4qDUsL+7BlMU0GM6cn0M5i61GnvZX21OMcJ2K1X dwZYU8JJ3fO5n3OsO2ONFrHTDf+HJYEvB9O/Whn1ng0FaPopR7s7eTmw5oKwRpUJdSZEN9 wPoi3V+IcarGLspZNTyVcaNg4Xw7V/Q= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701108089; a=rsa-sha256; cv=none; b=XVjvXPkaWVkJ6pSgi54crLq9JwnE30U6xQxGf1Fi3e6WynB3njEMzPkm/GfJ8A3MvTYkWf xHW6e/NHDg1aAvk9BuSMk4umtpjCdyTeJl0hZ+nloVM4NGbks7zzmFbj80AmF7cwPVznIJ y9Btkm6ohKf48WQsE9Wabz2SzFtU3o8= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="ul4K9Hg/"; spf=pass (imf09.hostedemail.com: domain of maz@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=maz@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id A9859CE1387; Mon, 27 Nov 2023 18:01:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BDF0DC433C7; Mon, 27 Nov 2023 18:01:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1701108083; bh=Ctz2/d8fKRCj3eHDttwdg2nfR3buzb2KJwcp2lA0lBU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ul4K9Hg/bVzcrzbZ2AsrPwCEGW8K6+dumYyBXoP4AvyoIZwc3cLerYqpaR8F1FbXz tumsWkfgwMVR+9dX31+U5LckZTLkhGbMLRKsEAA6zIOMJfs3+2U9x29oHEl+CUUtCL +kTSPuih54Nl8IBrNoNmgOYL0TASzMSZx/55I6idiLeV3BMiguZnutSRrGLRUC8Rw1 KaUANBSZAb8QM0/rOGoq3jXutCrMxGndXtubHs6JoOFoYVlaZnLxoBML5/gGjlIVp8 KBTbYz+C6znLEW9fWgHP4bPWl7K53NFHLzcGOmAlgvCHT9dZdKnhmVfLJnWW3BGasa gxs48H8FgkjIA== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1r7fv7-00GsvN-5x; Mon, 27 Nov 2023 18:01:21 +0000 Date: Mon, 27 Nov 2023 18:01:18 +0000 Message-ID: <86bkbfcbyp.wl-maz@kernel.org> From: Marc Zyngier To: Joey Gouly Cc: linux-arm-kernel@lists.infradead.org, akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, broonie@kernel.org, catalin.marinas@arm.com, dave.hansen@linux.intel.com, oliver.upton@linux.dev, shuah@kernel.org, will@kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, James Morse , Suzuki K Poulose , Zenghui Yu Subject: Re: [PATCH v3 06/25] KVM: arm64: Save/restore POE registers In-Reply-To: <20231124163510.1835740-7-joey.gouly@arm.com> References: <20231124163510.1835740-1-joey.gouly@arm.com> <20231124163510.1835740-7-joey.gouly@arm.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/29.1 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: joey.gouly@arm.com, linux-arm-kernel@lists.infradead.org, akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, broonie@kernel.org, catalin.marinas@arm.com, dave.hansen@linux.intel.com, oliver.upton@linux.dev, shuah@kernel.org, will@kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-Rspamd-Queue-Id: 28111140106 X-Rspam-User: X-Stat-Signature: 471ejfnmzpom5ufs8efx9dbp5jx9s6bf X-Rspamd-Server: rspam03 X-HE-Tag: 1701108088-618249 X-HE-Meta: U2FsdGVkX194bzQktVPZox8TJuxJ2+hjP3W8H79mGwnaAf38qYPl8UyHi7xdlRTiBs1B0Dspsf1kVBGi8wnChtdSKcIGhyyXcWlP2UdW2wRNdnHo9SU8CRwvuh/I033ln93TMr1VPcOQ7IDEUriTvLXSEZC9iZAcf3jOiumOJMbx+MAo+tVxrD7EnxWPzK5gBoOfjdOMiI3A58CDqX0ySug3m4nUgH4FZGuGufYm4Sm1s9GDtAVEz/Ck5eBCJjiCag3+bPPxbrkgLk0uyYO3zMNmUsUHDqkbNO9Vfq2jeMLW5OfEy6GzjUMF17AHfBIGHKxmvbV1TxHy1+PlsVcyVDHPUcbYEWpFGxDWS5Z6f4PMo7x+PZYNlioRQIGM6JFRdqqb6k2xIegaoRaRvAyY1z3R5+l8vORh/iZ76IBRRmLH94+at8eYB2G6d74LEloFlUQV61bFxmddiocGFTfNCM+NUiZsk55booOCM7GH2rgsRE3wh1AO6G9/IHt5oZ+1zkhYgx3pMK7k9QudSYmVPOunR90A52UbgUGm9561+BY4D/Cz+CtXKESJOQ/FdEvRORxvZ9hHWYR4mtsGPrIM0NcLqZKfIcRDmavDoBUDusqenVgjKN4bOuxrfhgFsiuoVDUYtxd0XgP96Q63B+s/Xiz8Q1I3KSNsEmBWKzsqdOSSvGdZ0FN1iyvOfEMlpyHbUKwSeZVMHVH9hJwOnA0rQ7QG5fv6VE99iKobI4AxXQWItw1kFQdhLwmGmlWaBg3BYskhA/5Te15vTxs4ZjtsGqVGUaOdczzGYjYBVYMIrJArzU7wHS5F4MthcJOJtqkYYzn2MQRkE/24QHlQhT6dcM8ad1aRQ01M/N1YsvUPA8EdnzAhrsDxw9IotCt1uNqrNDRKVKYTETz68N8yDF0mabdpGEoA0XcOIk7fQgLD5Ylw8TxdcYK4nyjJXO+p9QmK43rXA0I6jFEwyXp8BJ1 nSPu2A3l +QcA0EOaWeZGYd+SyqFMW6JQMm/9GTvo5pRgISahvGt8dHSw1CcoWwTbdsHoD2Eud+U/Rf3o334QeupJOIJfS8OYinCzpY3zNo+tPmHffAFbt1uOsKnBEpiE/Ih8vUMj222e7sVtHbNNPRUw4ZW7HOcuE5ApMp9WfhzLXbUOKLme6uBz62/aWnDtxI1uwM75y5ckI3pa1daiZrCtwXRQi4PnChO1UQhsIK2JjZEQ444Pq/EyI6kkxZtdoRarcimDf9Bvv/a6/W3qxDt6ZhuOD1NqqemRegag9qOqtiMqV1LPjAgJ6v2fCKXirqg== 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 Fri, 24 Nov 2023 16:34:51 +0000, Joey Gouly wrote: > > Define the new system registers that POE introduces and context switch them. I would really like to see a discussion on the respective lifetimes of these two registers (see below). > > Signed-off-by: Joey Gouly > Cc: Marc Zyngier > Cc: Oliver Upton > Cc: Catalin Marinas > Cc: Will Deacon > --- > arch/arm64/include/asm/kvm_arm.h | 4 ++-- > arch/arm64/include/asm/kvm_host.h | 4 ++++ > arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 10 ++++++++++ > arch/arm64/kvm/sys_regs.c | 2 ++ > 4 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h > index b85f46a73e21..597470e0b87b 100644 > --- a/arch/arm64/include/asm/kvm_arm.h > +++ b/arch/arm64/include/asm/kvm_arm.h > @@ -346,14 +346,14 @@ > */ > #define __HFGRTR_EL2_RES0 (GENMASK(63, 56) | GENMASK(53, 51)) > #define __HFGRTR_EL2_MASK GENMASK(49, 0) > -#define __HFGRTR_EL2_nMASK (GENMASK(58, 57) | GENMASK(55, 54) | BIT(50)) > +#define __HFGRTR_EL2_nMASK (GENMASK(60, 57) | GENMASK(55, 54) | BIT(50)) > > #define __HFGWTR_EL2_RES0 (GENMASK(63, 56) | GENMASK(53, 51) | \ > BIT(46) | BIT(42) | BIT(40) | BIT(28) | \ > GENMASK(26, 25) | BIT(21) | BIT(18) | \ > GENMASK(15, 14) | GENMASK(10, 9) | BIT(2)) > #define __HFGWTR_EL2_MASK GENMASK(49, 0) > -#define __HFGWTR_EL2_nMASK (GENMASK(58, 57) | GENMASK(55, 54) | BIT(50)) > +#define __HFGWTR_EL2_nMASK (GENMASK(60, 57) | GENMASK(55, 54) | BIT(50)) > > #define __HFGITR_EL2_RES0 GENMASK(63, 57) > #define __HFGITR_EL2_MASK GENMASK(54, 0) > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > index 824f29f04916..fa9ebd8fce40 100644 > --- a/arch/arm64/include/asm/kvm_host.h > +++ b/arch/arm64/include/asm/kvm_host.h > @@ -401,6 +401,10 @@ enum vcpu_sysreg { > PIR_EL1, /* Permission Indirection Register 1 (EL1) */ > PIRE0_EL1, /* Permission Indirection Register 0 (EL1) */ > > + /* Permission Overlay Extension registers */ > + POR_EL1, /* Permission Overlay Register 1 (EL1) */ > + POR_EL0, /* Permission Overlay Register 0 (EL0) */ > + > /* 32bit specific registers. */ > DACR32_EL2, /* Domain Access Control Register */ > IFSR32_EL2, /* Instruction Fault Status Register */ > diff --git a/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h b/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h > index bb6b571ec627..22f07ee43e7e 100644 > --- a/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h > +++ b/arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h > @@ -19,6 +19,9 @@ > static inline void __sysreg_save_common_state(struct kvm_cpu_context *ctxt) > { > ctxt_sys_reg(ctxt, MDSCR_EL1) = read_sysreg(mdscr_el1); > + > + if (system_supports_poe()) > + ctxt_sys_reg(ctxt, POR_EL0) = read_sysreg_s(SYS_POR_EL0); So this is saved as eagerly as it gets. Why? If it only affects EL0, it can be saved/restored in a much lazier way. > } > > static inline void __sysreg_save_user_state(struct kvm_cpu_context *ctxt) > @@ -59,6 +62,8 @@ static inline void __sysreg_save_el1_state(struct kvm_cpu_context *ctxt) > ctxt_sys_reg(ctxt, PIR_EL1) = read_sysreg_el1(SYS_PIR); > ctxt_sys_reg(ctxt, PIRE0_EL1) = read_sysreg_el1(SYS_PIRE0); And the fact that you only touch PIRE0_EL1 here seems to be a good indication that the above can be relaxed. > } > + if (system_supports_poe()) nit: missing new line before the if(). > + ctxt_sys_reg(ctxt, POR_EL1) = read_sysreg_el1(SYS_POR); > ctxt_sys_reg(ctxt, PAR_EL1) = read_sysreg_par(); > ctxt_sys_reg(ctxt, TPIDR_EL1) = read_sysreg(tpidr_el1); > > @@ -89,6 +94,9 @@ static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt) > static inline void __sysreg_restore_common_state(struct kvm_cpu_context *ctxt) > { > write_sysreg(ctxt_sys_reg(ctxt, MDSCR_EL1), mdscr_el1); > + > + if (system_supports_poe()) > + write_sysreg_s(ctxt_sys_reg(ctxt, POR_EL0), SYS_POR_EL0); Same thing here about the eager restore. > } > > static inline void __sysreg_restore_user_state(struct kvm_cpu_context *ctxt) > @@ -135,6 +143,8 @@ static inline void __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt) > write_sysreg_el1(ctxt_sys_reg(ctxt, PIR_EL1), SYS_PIR); > write_sysreg_el1(ctxt_sys_reg(ctxt, PIRE0_EL1), SYS_PIRE0); > } > + if (system_supports_poe()) new line. > + write_sysreg_el1(ctxt_sys_reg(ctxt, POR_EL1), SYS_POR); > write_sysreg(ctxt_sys_reg(ctxt, PAR_EL1), par_el1); > write_sysreg(ctxt_sys_reg(ctxt, TPIDR_EL1), tpidr_el1); > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 4735e1b37fb3..a54e5eadbf29 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -2269,6 +2269,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { > { SYS_DESC(SYS_MAIR_EL1), access_vm_reg, reset_unknown, MAIR_EL1 }, > { SYS_DESC(SYS_PIRE0_EL1), NULL, reset_unknown, PIRE0_EL1 }, > { SYS_DESC(SYS_PIR_EL1), NULL, reset_unknown, PIR_EL1 }, > + { SYS_DESC(SYS_POR_EL1), NULL, reset_unknown, POR_EL1 }, > { SYS_DESC(SYS_AMAIR_EL1), access_vm_reg, reset_amair_el1, AMAIR_EL1 }, > > { SYS_DESC(SYS_LORSA_EL1), trap_loregion }, > @@ -2352,6 +2353,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { > .access = access_pmovs, .reg = PMOVSSET_EL0, > .get_user = get_pmreg, .set_user = set_pmreg }, > > + { SYS_DESC(SYS_POR_EL0), NULL, reset_unknown, POR_EL0 }, > { SYS_DESC(SYS_TPIDR_EL0), NULL, reset_unknown, TPIDR_EL0 }, > { SYS_DESC(SYS_TPIDRRO_EL0), NULL, reset_unknown, TPIDRRO_EL0 }, > { SYS_DESC(SYS_TPIDR2_EL0), undef_access }, Another thing that is missing is the trap routing for NV in emulated-nested.c. Please fill in the various tables there. Thanks, M. -- Without deviation from the norm, progress is not possible.