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 37725C3DA4A for ; Tue, 20 Aug 2024 10:49:54 +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-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=wK23K92tavlcZEyxp1UkkjFE9vQO85ymMxabZ7m0S60=; b=jI4Nue9cDTLQhaL1PFQCYQ3J9w BF7bEYAgnTfEuHMWWF4zvU+rDXw/PKAhGeKp1/nyztKclep9EhI+4FBH+z618OHF6hxMEXv8HUCix 08iIWQmP1JM65v1uUtvyQkICKUiwkCi3Cee4yQjPthbQrzpLfEEJgUJhVEAF1F9acZGZcEjHEDPKS K03vKxUd9yCXRjiyIdeAHZ9YrH4rTEjKilg9wSgoXZ3yc0DhDMw0RX4io7X94pPAX7SiNfMsV5c1q M26vK85akx3seF4gyMqvYsvMOJ6CkFagQz3rw1KmouJfVE8vu81bFMXwN90/EJDMnRkQfylHFzzzS IycZcyqw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sgMQn-00000004tGc-2f5p; Tue, 20 Aug 2024 10:49:41 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sgMFj-00000004q1r-24Bi for linux-arm-kernel@bombadil.infradead.org; Tue, 20 Aug 2024 10:38:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=wK23K92tavlcZEyxp1UkkjFE9vQO85ymMxabZ7m0S60=; b=kSQbNv/eR4zWpjTpKJ/mTWf6lH sAN0J8eNMfYsQM1eo4mqUCdz7tLAVxz1J4GPRrvgRo1xKBPki0ig0NDjqGGeBnxAsMoO/zIt74yBk w6MWRJlC7rS7co3j/RCCJlBYQKvh/oF6b9ziO8DY0qmxlAWUrV3dZZARdXA7vdneqRc+/hCfoVeVq uI1HQyfgmHgThbU/0ypll7p34Jc4fV8dGTZKvyWgEomnUFGnhaIx0oethI8Ih1MXlRMJx8iqRLnLF jtFfCBnF/XHvHRRUBMJcSODc+YLPvXneiiuzt63kNQm7pe692gehFcSrnL3Y16RccJm3szZS03g/1 vsM8fJRA==; Received: from dfw.source.kernel.org ([139.178.84.217]) by desiato.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sgMFg-00000009JjU-0Iaz for linux-arm-kernel@lists.infradead.org; Tue, 20 Aug 2024 10:38:14 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 46DB860E17; Tue, 20 Aug 2024 10:38:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17552C4AF09; Tue, 20 Aug 2024 10:38:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1724150288; bh=EF8aKuuoQKZ+bIKTimqLMEUEDhCJhIZkBeFL7Woj37A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tq4p+ZPOgugKLJqTkikFgVyDwKrzLOpYzYupoLfEyDZNHNB4TzzMrb/PvQ1dVfWh9 NRkKnNE9X+EF4R3DGcM0kSwew6dVe9ZRSEXkJceUXqQBAR1NJ8SKi1+jKfkeRyhrfZ WZmPtpnG8QFD6WffNf8ihzhmH6XF9pJ9qhsFg2iMv2rIyPGvpQBklVTDI10deA1qzd AbO48iQ9c+ocqFzkT86hJCAtdlFynXI8jx7boKLopFk0eHWGr12i/9PmWi9Y6Upsvj ZV1oEjD1aRG+Vu3hfkrciCLhkoTM9gbPQ1KsfI+uKlpPbMkor5rogQyG0vyB6yBSAc XmSfC/AWetlNQ== Received: from sofa.misterjones.org ([185.219.108.64] helo=valley-girl.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1sgMFa-005Ea3-8e; Tue, 20 Aug 2024 11:38:06 +0100 From: Marc Zyngier To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu , Joey Gouly , Alexandru Elisei , Anshuman Khandual , Przemyslaw Gaj , Jintack Lim Subject: [PATCH v4 11/18] KVM: arm64: nv: Add basic emulation of AT S1E2{R,W} Date: Tue, 20 Aug 2024 11:37:49 +0100 Message-Id: <20240820103756.3545976-12-maz@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240820103756.3545976-1-maz@kernel.org> References: <20240820103756.3545976-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com, joey.gouly@arm.com, alexandru.elisei@arm.com, anshuman.khandual@arm.com, pgaj@cadence.com, jintack.lim@linaro.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240820_113812_537283_54EECE8E X-CRM114-Status: GOOD ( 12.58 ) 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 Similar to our AT S1E{0,1} emulation, we implement the AT S1E2 handling. This emulation of course suffers from the same problems, but is somehow simpler due to the lack of PAN2 and the fact that we are guaranteed to execute it from the correct context. Co-developed-by: Jintack Lim Signed-off-by: Jintack Lim Signed-off-by: Marc Zyngier --- arch/arm64/include/asm/kvm_asm.h | 1 + arch/arm64/kvm/at.c | 51 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h index 9b6c9f4f4d88..6ec062296976 100644 --- a/arch/arm64/include/asm/kvm_asm.h +++ b/arch/arm64/include/asm/kvm_asm.h @@ -237,6 +237,7 @@ extern int __kvm_tlbi_s1e2(struct kvm_s2_mmu *mmu, u64 va, u64 sys_encoding); extern void __kvm_timer_set_cntvoff(u64 cntvoff); extern void __kvm_at_s1e01(struct kvm_vcpu *vcpu, u32 op, u64 vaddr); +extern void __kvm_at_s1e2(struct kvm_vcpu *vcpu, u32 op, u64 vaddr); extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu); diff --git a/arch/arm64/kvm/at.c b/arch/arm64/kvm/at.c index 92df948350e1..34736c1fe398 100644 --- a/arch/arm64/kvm/at.c +++ b/arch/arm64/kvm/at.c @@ -164,3 +164,54 @@ void __kvm_at_s1e01(struct kvm_vcpu *vcpu, u32 op, u64 vaddr) vcpu_write_sys_reg(vcpu, par, PAR_EL1); } + +void __kvm_at_s1e2(struct kvm_vcpu *vcpu, u32 op, u64 vaddr) +{ + u64 par; + + /* + * We've trapped, so everything is live on the CPU. As we will be + * switching context behind everybody's back, disable interrupts... + */ + scoped_guard(write_lock_irqsave, &vcpu->kvm->mmu_lock) { + struct kvm_s2_mmu *mmu; + u64 val, hcr; + bool fail; + + mmu = &vcpu->kvm->arch.mmu; + + val = hcr = read_sysreg(hcr_el2); + val &= ~HCR_TGE; + val |= HCR_VM; + + if (!vcpu_el2_e2h_is_set(vcpu)) + val |= HCR_NV | HCR_NV1; + + write_sysreg(val, hcr_el2); + isb(); + + par = SYS_PAR_EL1_F; + + switch (op) { + case OP_AT_S1E2R: + fail = __kvm_at(OP_AT_S1E1R, vaddr); + break; + case OP_AT_S1E2W: + fail = __kvm_at(OP_AT_S1E1W, vaddr); + break; + default: + WARN_ON_ONCE(1); + fail = true; + } + + isb(); + + if (!fail) + par = read_sysreg_par(); + + write_sysreg(hcr, hcr_el2); + isb(); + } + + vcpu_write_sys_reg(vcpu, par, PAR_EL1); +} -- 2.39.2