From: Fuad Tabba <tabba@google.com>
To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org
Cc: maz@kernel.org, oliver.upton@linux.dev, james.clark@linaro.org,
will@kernel.org, joey.gouly@arm.com, suzuki.poulose@arm.com,
yuzenghui@huawei.com, catalin.marinas@arm.com,
broonie@kernel.org, qperret@google.com, tabba@google.com
Subject: [PATCH v2 00/12] KVM: arm64: Rework guest VM fixed feature handling and trapping in pKVM
Date: Fri, 22 Nov 2024 11:06:10 +0000 [thread overview]
Message-ID: <20241122110622.3010118-1-tabba@google.com> (raw)
Changes from v1 [1]:
- Calculating cptr_el2 is not based on
kvm_get_reset_cptr_el2()(), since that complicates things.
- Added two patches that refactor cptr_el2 related code.
- Dropped unintentionally included patch.
This patch series redoes how fixed features for protected guests
are specified in pKVM, as well as how trapping is handled based
on the features available for the VM. It also fixes a couple of
existing bugs in the process.
For protected VMs, some features should be trapped if the guest
tries to use them because they are not supported (e.g., SME), or
if they are not enabled for the particular VM (e.g., SVE).
Initially, pKVM took the approach of specifying these features
using macros and grouping their handling by feature id register.
This proved to be difficult to maintain and bug prone. Moreover,
since the nested virt work there is a framework in KVM for
storing feature id register values per VM, as well as how to
handle traps based on these values.
This patch series uses the VM's feature id registers to track the
supported features, a framework similar to nested virt to set the
trap values, and removes the need to store cptr_el2 per vcpu in
favor of setting its value when traps are activated, as VHE mode
does.
The changes should not affect the behavior of non-protected VMs
nor the behavior of VMs outside of protected mode in general.
This patch series is based on kvmarm/next (60ad25e14ab5), since
it requires the patches from the series that fixes initialization
of trap register values in pKVM [2].
Cheers,
/fuad
[1] https://lore.kernel.org/all/20241120105254.2842020-1-tabba@google.com/
[2] https://lore.kernel.org/all/20241018074833.2563674-1-tabba@google.com/
Fuad Tabba (12):
KVM: arm64: Consolidate allowed and restricted VM feature checks
KVM: arm64: Group setting traps for protected VMs by control register
KVM: arm64: Move checking protected vcpu features to a separate
function
KVM: arm64: Use KVM extension checks for allowed protected VM
capabilities
KVM: arm64: Initialize feature id registers for protected VMs
KVM: arm64: Set protected VM traps based on its view of feature
registers
KVM: arm64: Rework specifying restricted features for protected VMs
KVM: arm64: Remove fixed_config.h header
KVM: arm64: Remove redundant setting of HCR_EL2 trap bit
KVM: arm64: Calculate cptr_el2 traps on activating traps
KVM: arm64: Refactor kvm_reset_cptr_el2()
KVM: arm64: Fix the value of the CPTR_EL2 RES1 bitmask for nVHE
arch/arm64/include/asm/kvm_arm.h | 2 +-
arch/arm64/include/asm/kvm_emulate.h | 14 +-
arch/arm64/include/asm/kvm_host.h | 1 -
arch/arm64/include/asm/kvm_pkvm.h | 25 ++
arch/arm64/kvm/arm.c | 30 +-
.../arm64/kvm/hyp/include/nvhe/fixed_config.h | 223 ----------
arch/arm64/kvm/hyp/include/nvhe/pkvm.h | 5 +
arch/arm64/kvm/hyp/nvhe/pkvm.c | 313 +++++--------
arch/arm64/kvm/hyp/nvhe/setup.c | 1 -
arch/arm64/kvm/hyp/nvhe/switch.c | 52 ++-
arch/arm64/kvm/hyp/nvhe/sys_regs.c | 413 ++++++++++--------
11 files changed, 415 insertions(+), 664 deletions(-)
delete mode 100644 arch/arm64/kvm/hyp/include/nvhe/fixed_config.h
base-commit: 60ad25e14ab5a4e56c8bf7f7d6846eacb9cd53df
--
2.47.0.371.ga323438b13-goog
next reply other threads:[~2024-11-22 11:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-22 11:06 Fuad Tabba [this message]
2024-11-22 11:06 ` [PATCH v2 01/12] KVM: arm64: Consolidate allowed and restricted VM feature checks Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 02/12] KVM: arm64: Group setting traps for protected VMs by control register Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 03/12] KVM: arm64: Move checking protected vcpu features to a separate function Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 04/12] KVM: arm64: Use KVM extension checks for allowed protected VM capabilities Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 05/12] KVM: arm64: Initialize feature id registers for protected VMs Fuad Tabba
2024-11-24 12:12 ` Marc Zyngier
2024-11-25 11:58 ` Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 06/12] KVM: arm64: Set protected VM traps based on its view of feature registers Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 07/12] KVM: arm64: Rework specifying restricted features for protected VMs Fuad Tabba
2024-11-24 12:38 ` Marc Zyngier
2024-11-25 12:00 ` Fuad Tabba
2024-11-26 18:28 ` Kristina Martšenko
2024-11-27 9:06 ` Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 08/12] KVM: arm64: Remove fixed_config.h header Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 09/12] KVM: arm64: Remove redundant setting of HCR_EL2 trap bit Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 10/12] KVM: arm64: Calculate cptr_el2 traps on activating traps Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 11/12] KVM: arm64: Refactor kvm_reset_cptr_el2() Fuad Tabba
2024-11-22 11:06 ` [PATCH v2 12/12] KVM: arm64: Fix the value of the CPTR_EL2 RES1 bitmask for nVHE Fuad Tabba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241122110622.3010118-1-tabba@google.com \
--to=tabba@google.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=james.clark@linaro.org \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=qperret@google.com \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).