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 029B4C87FDD for ; Fri, 9 Jun 2023 16:54: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: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OoKJyNXTfgVEePALEdh5P6zfR0ZrK1K8Ra1Rl+L3ozY=; b=qGM85BCyyRcBPy /T/uoG0ybpEmr9WcX/7WMXlOD3LukPQgdint2h/6a4EXF7GQyV2X9/mfVC0fcUhHxzPWFoMN/QN9b Xes6nMPDkwLsBpRRGYwF/B3hY2EFnMMXoHe27Gj2NDzyg5Ri0WkXwbSvYTVQKszH82p8bF4ND3Iub kCzujFvRLX4ZtBU0gf4hTogNaPJIPrvENr0dhHAtzg7U6WaMpdhKLWyjRBficWK94wUwNjZSqIxF9 g/yLYkC8EtlxVhYO09TuVK0n3da0lhHwaSCLSSAbUZojjQJnXKukRKdU+7hgQ2Fmn/TAKyczvsxq2 Jnh0qld6scTLavemLLoA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q7fNg-00DfAI-2O; Fri, 09 Jun 2023 16:54:32 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q7fNd-00Df9b-1p for linux-arm-kernel@lists.infradead.org; Fri, 09 Jun 2023 16:54:31 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id EDD8963AF6; Fri, 9 Jun 2023 16:54:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 58AEAC433EF; Fri, 9 Jun 2023 16:54:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1686329668; bh=VEAIm3KCiR+BrjqeYaNfEcUH21Zmuw15Ud5A/ghy6dw=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=P7nlIQsTe+zKQOBoDoQNrZgVEnVxaaQCSazIQlrw1L/K6o3AIqG2KdShyOph+t3Ak g0UmYlP65doFVX9/WWLq/IULDVnLcKNkIYPZ44XMio1CAD1JHvEgkg1UBjDsbkXyjK qQpTwinC1bofjIUqHMHt8VMvgQB1aaNlIcXZwcWnnoh79htFsZd7FTfyJU+pac7ink WrcQP+5W6jREfEXGQ9LuBvZWR+M2qZ9H48/GTS7H8WCSyGKx9erqDrjU6rlucSY+46 TSNrUz8HWHkOenaJ5VyJWeoKRniMh2+HN0SNt6o5i8GbhmkXNPmod9aHobjadlW8Cg EsW3NG6tRTtXA== Received: from 152.5.30.93.rev.sfr.net ([93.30.5.152] helo=wait-a-minute.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 1q7fNZ-0048zH-Kn; Fri, 09 Jun 2023 17:54:26 +0100 Date: Fri, 09 Jun 2023 17:54:23 +0100 Message-ID: <87zg58mv9c.wl-maz@kernel.org> From: Marc Zyngier To: kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu , Quentin Perret , Will Deacon , Fuad Tabba , Catalin Marinas Subject: Re: [PATCH v3 00/17] KVM: arm64: Allow using VHE in the nVHE hypervisor In-Reply-To: <20230609162200.2024064-1-maz@kernel.org> References: <20230609162200.2024064-1-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/28.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 93.30.5.152 X-SA-Exim-Rcpt-To: kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com, qperret@google.com, will@kernel.org, tabba@google.com, catalin.marinas@arm.com 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-20230609_095429_689997_192A617D X-CRM114-Status: GOOD ( 33.81 ) 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: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org + Catalin, as this changes a bunch of arch stuff (nothing major, but still...) On Fri, 09 Jun 2023 17:21:43 +0100, Marc Zyngier wrote: > > KVM (on ARMv8.0) and pKVM (on all revisions of the architecture) use > the split hypervisor model that makes the EL2 code more or less > standalone. In the later case, we totally ignore the VHE mode and > stick with the good old v8.0 EL2 setup. > > This is all good, but means that the EL2 code is limited in what it > can do with its own address space. This series proposes to remove this > limitation and to allow VHE to be used even with the split hypervisor > model. This has some potential isolation benefits[1], and eventually > allow systems that do not support HCR_EL2.E2H==0 to run pKVM. > > We introduce a new "mode" for KVM called hVHE, in reference to the > nVHE mode, and indicating that only the hypervisor is using VHE. Note > that this is all this series does. No effort is made to improve the VA > space management, which will be the subject of another series if this > one ever makes it. > > This has been tested on a M1 box (bare metal) as well as as a nested > guest on M2, both with the standard nVHE and protected modes, with no > measurable change in performance. > > Note: the last patch of this series is not a merge candidate. > > Thanks, > > M. > > [1] https://www.youtube.com/watch?v=1F_Mf2j9eIo&list=PLbzoR-pLrL6qWL3v2KOcvwZ54-w0z5uXV&index=11 > > * From v2: > - Use BUILD_BUG_ON() to prevent the use of is_kernel_in_hyp_mode() > form hypervisor context > - Validate that all CPUs are VHE-capable before flipping the > capability > > * From v1: > - Fixed CNTHCTL_EL2 setup when switching from E2H=0 to E2H=1 > Amusingly, this was found on NV... > - Rebased on 6.4-rc2 > > Marc Zyngier (17): > KVM: arm64: Drop is_kernel_in_hyp_mode() from > __invalidate_icache_guest_page() > arm64: Prevent the use of is_kernel_in_hyp_mode() in hypervisor code > arm64: Turn kaslr_feature_override into a generic SW feature override > arm64: Add KVM_HVHE capability and has_hvhe() predicate > arm64: Don't enable VHE for the kernel if OVERRIDE_HVHE is set > arm64: Allow EL1 physical timer access when running VHE > arm64: Use CPACR_EL1 format to set CPTR_EL2 when E2H is set > KVM: arm64: Remove alternatives from sysreg accessors in VHE > hypervisor context > KVM: arm64: Key use of VHE instructions in nVHE code off > ARM64_KVM_HVHE > KVM: arm64: Force HCR_EL2.E2H when ARM64_KVM_HVHE is set > KVM: arm64: Disable TTBR1_EL2 when using ARM64_KVM_HVHE > KVM: arm64: Adjust EL2 stage-1 leaf AP bits when ARM64_KVM_HVHE is set > KVM: arm64: Rework CPTR_EL2 programming for HVHE configuration > KVM: arm64: Program the timer traps with VHE layout in hVHE mode > KVM: arm64: Force HCR_E2H in guest context when ARM64_KVM_HVHE is set > arm64: Allow arm64_sw.hvhe on command line > KVM: arm64: Terrible timer hack for M1 with hVHE > > arch/arm64/include/asm/arch_timer.h | 8 ++++ > arch/arm64/include/asm/cpufeature.h | 5 +++ > arch/arm64/include/asm/el2_setup.h | 26 ++++++++++++- > arch/arm64/include/asm/kvm_arm.h | 4 +- > arch/arm64/include/asm/kvm_asm.h | 1 + > arch/arm64/include/asm/kvm_emulate.h | 33 +++++++++++++++- > arch/arm64/include/asm/kvm_hyp.h | 37 +++++++++++++----- > arch/arm64/include/asm/kvm_mmu.h | 3 +- > arch/arm64/include/asm/virt.h | 12 +++++- > arch/arm64/kernel/cpufeature.c | 21 +++++++++++ > arch/arm64/kernel/hyp-stub.S | 10 ++++- > arch/arm64/kernel/idreg-override.c | 25 ++++++++----- > arch/arm64/kernel/image-vars.h | 3 ++ > arch/arm64/kernel/kaslr.c | 6 +-- > arch/arm64/kvm/arch_timer.c | 5 +++ > arch/arm64/kvm/arm.c | 12 +++++- > arch/arm64/kvm/fpsimd.c | 4 +- > arch/arm64/kvm/hyp/include/hyp/switch.h | 2 +- > arch/arm64/kvm/hyp/nvhe/hyp-init.S | 9 +++++ > arch/arm64/kvm/hyp/nvhe/hyp-main.c | 17 ++++++++- > arch/arm64/kvm/hyp/nvhe/pkvm.c | 27 ++++++++++--- > arch/arm64/kvm/hyp/nvhe/switch.c | 28 ++++++++------ > arch/arm64/kvm/hyp/nvhe/timer-sr.c | 25 +++++++++++-- > arch/arm64/kvm/hyp/pgtable.c | 6 ++- > arch/arm64/kvm/hyp/vhe/switch.c | 2 +- > arch/arm64/kvm/sys_regs.c | 2 +- > arch/arm64/tools/cpucaps | 1 + > drivers/irqchip/irq-apple-aic.c | 50 ++++++++++++++++++++++++- > 28 files changed, 320 insertions(+), 64 deletions(-) > > -- > 2.34.1 > > > -- Without deviation from the norm, progress is not possible. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel