[PATCH v4 00/43] KVM: arm64: Revamp Fine Grained Trap handling
Marc Zyngier
maz at kernel.org
Tue May 6 09:43:05 PDT 2025
This is yet another version of the series last posted at [1].
The eagled eye reviewer will have noticed that since v2, the series
has more or less doubled in size for any reasonable metric (number of
patches, number of lines added or deleted). It is therefore pretty
urgent that this gets either merged or forgotten! ;-)
See the change log below for the details -- most of it is related to
FGT2 (and its rather large dependencies) being added.
* From v3:
- Added missing bit fields for CPACR_EL1
- Fixed a bunch of typos in comments and commit messages
- Cleaned-up whitespace damage from the sysreg generator
- Collected RBs from Joey, with thanks!
* From v2:
- Added comprehensive support for FEAT_FGT2, as the host kernel is
now making use of these registers, without any form of context
switch in KVM. What could possibly go wrong?
- Reworked some of the FGT description and handling primitives,
reducing the boilerplate code and tables that get added over time.
- Rebased on 6.15-rc3.
[1]: https://lore.kernel.org/r/20250426122836.3341523-1-maz@kernel.org
Marc Zyngier (42):
arm64: sysreg: Add ID_AA64ISAR1_EL1.LS64 encoding for FEAT_LS64WB
arm64: sysreg: Update ID_AA64MMFR4_EL1 description
arm64: sysreg: Add layout for HCR_EL2
arm64: sysreg: Replace HFGxTR_EL2 with HFG{R,W}TR_EL2
arm64: sysreg: Update ID_AA64PFR0_EL1 description
arm64: sysreg: Update PMSIDR_EL1 description
arm64: sysreg: Update TRBIDR_EL1 description
arm64: sysreg: Update CPACR_EL1 description
arm64: sysreg: Add registers trapped by HFG{R,W}TR2_EL2
arm64: sysreg: Add registers trapped by HDFG{R,W}TR2_EL2
arm64: sysreg: Add system instructions trapped by HFGIRT2_EL2
arm64: Remove duplicated sysreg encodings
arm64: tools: Resync sysreg.h
arm64: Add syndrome information for trapped LD64B/ST64B{,V,V0}
arm64: Add FEAT_FGT2 capability
KVM: arm64: Tighten handling of unknown FGT groups
KVM: arm64: Simplify handling of negative FGT bits
KVM: arm64: Handle trapping of FEAT_LS64* instructions
KVM: arm64: Restrict ACCDATA_EL1 undef to FEAT_LS64_ACCDATA being
disabled
KVM: arm64: Don't treat HCRX_EL2 as a FGT register
KVM: arm64: Plug FEAT_GCS handling
KVM: arm64: Compute FGT masks from KVM's own FGT tables
KVM: arm64: Add description of FGT bits leading to EC!=0x18
KVM: arm64: Use computed masks as sanitisers for FGT registers
KVM: arm64: Propagate FGT masks to the nVHE hypervisor
KVM: arm64: Use computed FGT masks to setup FGT registers
KVM: arm64: Remove hand-crafted masks for FGT registers
KVM: arm64: Use KVM-specific HCRX_EL2 RES0 mask
KVM: arm64: Handle PSB CSYNC traps
KVM: arm64: Switch to table-driven FGU configuration
KVM: arm64: Validate FGT register descriptions against RES0 masks
KVM: arm64: Use FGT feature maps to drive RES0 bits
KVM: arm64: Allow kvm_has_feat() to take variable arguments
KVM: arm64: Use HCRX_EL2 feature map to drive fixed-value bits
KVM: arm64: Use HCR_EL2 feature map to drive fixed-value bits
KVM: arm64: Add FEAT_FGT2 registers to the VNCR page
KVM: arm64: Add sanitisation for FEAT_FGT2 registers
KVM: arm64: Add trap routing for FEAT_FGT2 registers
KVM: arm64: Add context-switch for FEAT_FGT2 registers
KVM: arm64: Allow sysreg ranges for FGT descriptors
KVM: arm64: Add FGT descriptors for FEAT_FGT2
KVM: arm64: Handle TSB CSYNC traps
Mark Rutland (1):
KVM: arm64: Unconditionally configure fine-grain traps
arch/arm64/include/asm/el2_setup.h | 14 +-
arch/arm64/include/asm/esr.h | 10 +-
arch/arm64/include/asm/kvm_arm.h | 186 ++--
arch/arm64/include/asm/kvm_host.h | 56 +-
arch/arm64/include/asm/sysreg.h | 26 +-
arch/arm64/include/asm/vncr_mapping.h | 5 +
arch/arm64/kernel/cpufeature.c | 7 +
arch/arm64/kvm/Makefile | 2 +-
arch/arm64/kvm/arm.c | 13 +
arch/arm64/kvm/config.c | 1085 +++++++++++++++++++++++
arch/arm64/kvm/emulate-nested.c | 583 ++++++++----
arch/arm64/kvm/handle_exit.c | 77 ++
arch/arm64/kvm/hyp/include/hyp/switch.h | 158 ++--
arch/arm64/kvm/hyp/nvhe/switch.c | 12 +
arch/arm64/kvm/hyp/vgic-v3-sr.c | 8 +-
arch/arm64/kvm/nested.c | 223 +----
arch/arm64/kvm/sys_regs.c | 68 +-
arch/arm64/tools/cpucaps | 1 +
arch/arm64/tools/sysreg | 1006 ++++++++++++++++++++-
tools/arch/arm64/include/asm/sysreg.h | 65 +-
20 files changed, 2894 insertions(+), 711 deletions(-)
create mode 100644 arch/arm64/kvm/config.c
--
2.39.2
More information about the linux-arm-kernel
mailing list