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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4CD4BC021B1 for ; Thu, 20 Feb 2025 19:47:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:MIME-Version: References:In-Reply-To:Subject:Cc:To:From:Message-ID:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xpKwCGGelt7n6F1vTzeT/crUMoUcltbnAq0Rs/8+HX8=; b=zvmiH3END+Q9xUI1mT6y+3XsNS DIp3btHwSSN0ebAwmBNHHnFqdGkoyjTFpBcU2lkdpcsrfk5xFutraVXXR9g/D7EJYS4Aqu0ScYe23 pj0ZcBF7GGJzADRXWFq+HZN2V6eRikLzjggaFbpAjlhzoMuQlOzhvqikltdcAhzAQ0LeRdgObvs/k hNMCzR4Q53rvj5HIjBHoD0IDApfeDXBrI2VdhEEVBc8Pc65BngsK0XuM2O/mdYSoi/oAxltJ/urKj WOxBkvTREGc3I7pgGYi1wSk/ltX/lMpuKiow3yxGo065lNGkn5sc7SHOS8TYQp2BoKCnZgNASBHbP Cs1XIEbw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlCWN-00000002fSP-3e0c; Thu, 20 Feb 2025 19:47:43 +0000 Received: from tor.source.kernel.org ([2600:3c04::f03c:95ff:fe5e:7468]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlCUt-00000002f0M-2uJ8 for linux-arm-kernel@lists.infradead.org; Thu, 20 Feb 2025 19:46:11 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 26A07615AB; Thu, 20 Feb 2025 19:46:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70DF6C4CED1; Thu, 20 Feb 2025 19:46:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740080770; bh=c4bZZ2AcjYK50fAJHJC/bRwjqNKu/T2axmCC96Puj4E=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=YYM2NL/EP7KpxSLCuKY4axUMZF43IpWlsn9lP8YqgYJ6sHpPgppAMpjwwM3/gAYQ1 jchb1g+zVysYFn6a5h3rMFbt0OQLR3xnTkjzQyupMn/TvxF/piuekjOu1OFxuAuIc8 4+koXGH1paX4/uOYhHGa5yiwkz5RDOsldlBIE6yocoQnvS+y+FZ7oRJZ7o92bbY8+E ylPaARRE1NpbX9aXowvtL47zr/wbJtx9Pgeq2/hAAfid9yKhv+RB7upyRk2lhNA/zp f+1+DUygBHI0aCrH0vNMWe0JyPG3sJe2zp6rJHs/cFKH+pg/gP9/r7w01JA4o5MCMO U8GkxKWKZu6Kw== 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 1tlCUq-006L9u-4S; Thu, 20 Feb 2025 19:46:08 +0000 Date: Thu, 20 Feb 2025 19:46:07 +0000 Message-ID: <86r03squ0w.wl-maz@kernel.org> From: Marc Zyngier To: Sebastian Ott Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Joey Gouly , Suzuki K Poulose , Oliver Upton , Zenghui Yu , Eric Auger , gankulkarni@os.amperecomputing.com Subject: Re: [PATCH v2 02/14] KVM: arm64: Hide ID_AA64MMFR2_EL1.NV from guest and userspace In-Reply-To: References: <20250220134907.554085-1-maz@kernel.org> <20250220134907.554085-3-maz@kernel.org> 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.4 (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: sebott@redhat.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, joey.gouly@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com, eric.auger@redhat.com, gankulkarni@os.amperecomputing.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, 20 Feb 2025 17:36:35 +0000, Sebastian Ott wrote: > > Hi Marc, > > On Thu, 20 Feb 2025, Marc Zyngier wrote: > > Since our take on FEAT_NV is to only support FEAT_NV2, we should > > never expose ID_AA64MMFR2_EL1.NV to a guest nor userspace. > > > > Make sure we mask this field for good. > > > > Signed-off-by: Marc Zyngier > > --- > > arch/arm64/kvm/sys_regs.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > > index 82430c1e1dd02..9f10dbd26e348 100644 > > --- a/arch/arm64/kvm/sys_regs.c > > +++ b/arch/arm64/kvm/sys_regs.c > > @@ -1627,6 +1627,7 @@ static u64 __kvm_read_sanitised_id_reg(const struct kvm_vcpu *vcpu, > > break; > > case SYS_ID_AA64MMFR2_EL1: > > val &= ~ID_AA64MMFR2_EL1_CCIDX_MASK; > > + val &= ~ID_AA64MMFR2_EL1_NV; > > break; > > This would cause issues when you update the host kernel while keeping the > guests register state. Could we allow to write (but ignore) the previously > valid value? Like it was handled in: > 6685f5d572c2 KVM: arm64: Disable MPAM visibility by default and ignore VMM writes Yeah, this falls into the same "shouldn't have exposed this the first place" bucket. Annoying. Something like the diff below? M. diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 2e14562b5841f..87269de31a642 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1946,6 +1946,22 @@ static int set_id_aa64pfr1_el1(struct kvm_vcpu *vcpu, return set_id_reg(vcpu, rd, user_val); } +static int set_id_aa64mmfr2_el1(struct kvm_vcpu *vcpu, + const struct sys_reg_desc *rd, u64 user_val) +{ + u64 hw_val = read_sanitised_ftr_reg(SYS_ID_AA64MMFR2_EL1); + u64 nv_mask = ID_AA64MMFR2_EL1_NV_MASK; + + /* + * We made the mistake to expose the now deprecated NV field, + * so allow userspace to write it, but silently ignore it. + */ + if ((hw_val & nv_mask) == (user_val & nv_mask)) + user_val &= ~nv_mask; + + return set_id_reg(vcpu, rd, user_val); +} + static int set_ctr_el0(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, u64 user_val) { @@ -2730,7 +2746,8 @@ static const struct sys_reg_desc sys_reg_descs[] = { ID_AA64MMFR1_EL1_XNX | ID_AA64MMFR1_EL1_VH | ID_AA64MMFR1_EL1_VMIDBits)), - ID_WRITABLE(ID_AA64MMFR2_EL1, ~(ID_AA64MMFR2_EL1_RES0 | + ID_FILTERED(ID_AA64MMFR2_EL1, + id_aa64mmfr2_el1, ~(ID_AA64MMFR2_EL1_RES0 | ID_AA64MMFR2_EL1_EVT | ID_AA64MMFR2_EL1_FWB | ID_AA64MMFR2_EL1_IDS | -- Without deviation from the norm, progress is not possible.