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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3D96AC433DF for ; Wed, 26 Aug 2020 17:08:34 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 06EE220737 for ; Wed, 26 Aug 2020 17:08:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 06EE220737 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 925E36B0005; Wed, 26 Aug 2020 13:08:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8D7978D0001; Wed, 26 Aug 2020 13:08:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7C45F6B0007; Wed, 26 Aug 2020 13:08:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0075.hostedemail.com [216.40.44.75]) by kanga.kvack.org (Postfix) with ESMTP id 6306E6B0005 for ; Wed, 26 Aug 2020 13:08:33 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 280FA181AEF07 for ; Wed, 26 Aug 2020 17:08:33 +0000 (UTC) X-FDA: 77193353706.26.glove21_040254e27066 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin26.hostedemail.com (Postfix) with ESMTP id 19A2F1804B66B for ; Wed, 26 Aug 2020 17:08:32 +0000 (UTC) X-HE-Tag: glove21_040254e27066 X-Filterd-Recvd-Size: 4847 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by imf27.hostedemail.com (Postfix) with ESMTP for ; Wed, 26 Aug 2020 17:08:31 +0000 (UTC) Received: from gaia (unknown [46.69.195.127]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CC10D20737; Wed, 26 Aug 2020 17:08:28 +0000 (UTC) Date: Wed, 26 Aug 2020 18:08:26 +0100 From: Catalin Marinas To: Marc Zyngier Cc: Vincenzo Frascino , linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, Will Deacon , Dave P Martin , Szabolcs Nagy , Kevin Brodsky , Andrey Konovalov , Peter Collingbourne , Andrew Morton , Suzuki K Poulose Subject: Re: [PATCH v8 03/28] arm64: mte: CPU feature detection and initial sysreg configuration Message-ID: <20200826170826.GC24545@gaia> References: <20200824182758.27267-1-catalin.marinas@arm.com> <20200824182758.27267-4-catalin.marinas@arm.com> <61bba3c1948651a5221b87f2dfa2872f@kernel.org> <20200825105450.GA22233@C02TF0J2HF1T.local> <8ef4b3d5d860346e47f4238bdb0f2a91@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8ef4b3d5d860346e47f4238bdb0f2a91@kernel.org> User-Agent: Mutt/1.10.1 (2018-07-13) X-Rspamd-Queue-Id: 19A2F1804B66B X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam03 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: On Tue, Aug 25, 2020 at 02:53:47PM +0100, Marc Zyngier wrote: > On 2020-08-25 11:54, Catalin Marinas wrote: > > On Tue, Aug 25, 2020 at 09:53:16AM +0100, Marc Zyngier wrote: > > > On 2020-08-24 19:27, Catalin Marinas wrote: > > > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > > > > index 077293b5115f..59b91f58efec 100644 > > > > --- a/arch/arm64/kvm/sys_regs.c > > > > +++ b/arch/arm64/kvm/sys_regs.c > > > > @@ -1131,6 +1131,8 @@ static u64 read_id_reg(const struct kvm_vcpu > > > > *vcpu, > > > > if (!vcpu_has_sve(vcpu)) > > > > val &= ~(0xfUL << ID_AA64PFR0_SVE_SHIFT); > > > > val &= ~(0xfUL << ID_AA64PFR0_AMU_SHIFT); > > > > + } else if (id == SYS_ID_AA64PFR1_EL1) { > > > > + val &= ~(0xfUL << ID_AA64PFR1_MTE_SHIFT); > > > > > > Hiding the capability is fine, but where is the handling of trapping > > > instructions done? They should result in an UNDEF being injected. > > > > They are a few new MTE-specific MSR/MRS which are trapped at EL2 but > > since KVM doesn't understand them yet, shouldn't it already inject > > undef back at EL1? That would be safer regardless of MTE support. > > An UNDEF will be injected, but not without spitting a nastygram in > the kernel log (look at emulate_sys_reg()). > > The best course of action is to have an entry in the sysreg table > that would explicitly do the handling. Something like below. I'll put them in a separate patch, to be reverted when we get proper MTE support in KVM. diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 59b91f58efec..c7d5d1bae044 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1384,6 +1384,13 @@ static bool access_ccsidr(struct kvm_vcpu *vcpu, struct sys_reg_params *p, return true; } +static bool access_mte_regs(struct kvm_vcpu *vcpu, struct sys_reg_params *p, + const struct sys_reg_desc *r) +{ + kvm_inject_undefined(vcpu); + return false; +} + /* sys_reg_desc initialiser for known cpufeature ID registers */ #define ID_SANITISED(name) { \ SYS_DESC(SYS_##name), \ @@ -1549,6 +1556,10 @@ static const struct sys_reg_desc sys_reg_descs[] = { { SYS_DESC(SYS_SCTLR_EL1), access_vm_reg, reset_val, SCTLR_EL1, 0x00C50078 }, { SYS_DESC(SYS_ACTLR_EL1), access_actlr, reset_actlr, ACTLR_EL1 }, { SYS_DESC(SYS_CPACR_EL1), NULL, reset_val, CPACR_EL1, 0 }, + + { SYS_DESC(SYS_RGSR_EL1), access_mte_regs }, + { SYS_DESC(SYS_GCR_EL1), access_mte_regs }, + { SYS_DESC(SYS_ZCR_EL1), NULL, reset_val, ZCR_EL1, 0, .visibility = sve_visibility }, { SYS_DESC(SYS_TTBR0_EL1), access_vm_reg, reset_unknown, TTBR0_EL1 }, { SYS_DESC(SYS_TTBR1_EL1), access_vm_reg, reset_unknown, TTBR1_EL1 }, @@ -1573,6 +1584,9 @@ static const struct sys_reg_desc sys_reg_descs[] = { { SYS_DESC(SYS_ERXMISC0_EL1), trap_raz_wi }, { SYS_DESC(SYS_ERXMISC1_EL1), trap_raz_wi }, + { SYS_DESC(SYS_TFSR_EL1), access_mte_regs }, + { SYS_DESC(SYS_TFSRE0_EL1), access_mte_regs }, + { SYS_DESC(SYS_FAR_EL1), access_vm_reg, reset_unknown, FAR_EL1 }, { SYS_DESC(SYS_PAR_EL1), NULL, reset_unknown, PAR_EL1 }, (still testing, it takes ages to boot a VM inside inside FVP) -- Catalin