Hi Paolo, Here's the set of KVM/arm64 updates for 6.8. The highlight this time around is the LPA2 work by Ryan, bringing 52bit IPA/PA support to 4k and 16k page sizes. Also of note is an extensive FGT rework by Fuad and another set of NV patches, mostly focusing on supporting NV2. The rest is a small set of fixes, mostly addressing vgic issues. Note that this PR contains a branch shared with the arm64 tree (sysreg definition updates), and that the LPA2 series is also shared with arm64 to resolve some conflicts. Please pull, M. The following changes since commit 2cc14f52aeb78ce3f29677c2de1f06c0e91471ab: Linux 6.7-rc3 (2023-11-26 19:59:33 -0800) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-6.8 for you to fetch changes up to 040113fa32f27096f531c377001936e0d7964597: KVM: arm64: Add missing memory barriers when switching to pKVM's hyp pgd (2024-01-04 19:33:00 +0000) ---------------------------------------------------------------- KVM/arm64 updates for Linux 6.8 - LPA2 support, adding 52bit IPA/PA capability for 4kB and 16kB base granule sizes. Branch shared with the arm64 tree. - Large Fine-Grained Trap rework, bringing some sanity to the feature, although there is more to come. This comes with a prefix branch shared with the arm64 tree. - Some additional Nested Virtualization groundwork, mostly introducing the NV2 VNCR support and retargetting the NV support to that version of the architecture. - A small set of vgic fixes and associated cleanups. ---------------------------------------------------------------- Anshuman Khandual (1): arm64/mm: Add FEAT_LPA2 specific ID_AA64MMFR0.TGRAN[2] Ard Biesheuvel (1): KVM: arm64: Use helpers to classify exception types reported via ESR Fuad Tabba (19): arm64/sysreg: Update HFGITR_EL2 definiton to DDI0601 2023-09 arm64/sysreg: Add definition for HAFGRTR_EL2 arm64/sysreg: Add missing Pauth_LR field definitions to ID_AA64ISAR1_EL1 arm64/sysreg: Add missing ExtTrcBuff field definition to ID_AA64DFR0_EL1 arm64/sysreg: Add missing system register definitions for FGT arm64/sysreg: Add missing system instruction definitions for FGT KVM: arm64: Explicitly trap unsupported HFGxTR_EL2 features KVM: arm64: Add missing HFGxTR_EL2 FGT entries to nested virt KVM: arm64: Add missing HFGITR_EL2 FGT entries to nested virt KVM: arm64: Add bit masks for HAFGRTR_EL2 KVM: arm64: Handle HAFGRTR_EL2 trapping in nested virt KVM: arm64: Update and fix FGT register masks KVM: arm64: Add build validation for FGT trap mask values KVM: arm64: Use generated FGT RES0 bits instead of specifying them KVM: arm64: Define FGT nMASK bits relative to other fields KVM: arm64: Macros for setting/clearing FGT bits KVM: arm64: Fix which features are marked as allowed for protected VMs KVM: arm64: Mark PAuth as a restricted feature for protected VMs KVM: arm64: Trap external trace for protected VMs Joey Gouly (2): arm64/sysreg: add system register POR_EL{0,1} arm64/sysreg: update CPACR_EL1 register Marc Zyngier (16): Merge remote-tracking branch 'arm64/for-next/sysregs' into kvm-arm64/fgt-rework Merge branch kvm-arm64/lpa2 into kvmarm-master/next Merge branch kvm-arm64/fgt-rework into kvmarm-master/next arm64: cpufeatures: Restrict NV support to FEAT_NV2 KVM: arm64: nv: Hoist vcpu_has_nv() into is_hyp_ctxt() KVM: arm64: nv: Compute NV view of idregs as a one-off KVM: arm64: nv: Drop EL12 register traps that are redirected to VNCR KVM: arm64: nv: Add non-VHE-EL2->EL1 translation helpers KVM: arm64: nv: Add include containing the VNCR_EL2 offsets KVM: arm64: Introduce a bad_trap() primitive for unexpected trap handling KVM: arm64: nv: Add EL2_REG_VNCR()/EL2_REG_REDIR() sysreg helpers KVM: arm64: nv: Map VNCR-capable registers to a separate page KVM: arm64: nv: Handle virtual EL2 registers in vcpu_read/write_sys_reg() Merge branch kvm-arm64/nv-6.8-prefix into kvmarm-master/next KVM: arm64: vgic-v4: Restore pending state on host userspace write Merge branch kvm-arm64/vgic-6.8 into kvmarm-master/next Mark Brown (9): arm64/sysreg: Add definition for ID_AA64PFR2_EL1 arm64/sysreg: Update ID_AA64ISAR2_EL1 defintion for DDI0601 2023-09 arm64/sysreg: Add definition for ID_AA64ISAR3_EL1 arm64/sysreg: Add definition for ID_AA64FPFR0_EL1 arm64/sysreg: Update ID_AA64SMFR0_EL1 definition for DDI0601 2023-09 arm64/sysreg: Update SCTLR_EL1 for DDI0601 2023-09 arm64/sysreg: Update HCRX_EL2 definition for DDI0601 2023-09 arm64/sysreg: Add definition for FPMR arm64/sysreg: Add new system registers for GCS Oliver Upton (4): KVM: arm64: vgic: Use common accessor for writes to ISPENDR KVM: arm64: vgic: Use common accessor for writes to ICPENDR KVM: arm64: vgic-v3: Reinterpret user ISPENDR writes as I{C,S}PENDR KVM: arm64: vgic-its: Avoid potential UAF in LPI translation cache Ryan Roberts (11): arm64/mm: Modify range-based tlbi to decrement scale arm64/mm: Add lpa2_is_enabled() kvm_lpa2_is_enabled() stubs arm64/mm: Update tlb invalidation routines for FEAT_LPA2 arm64: Add ARM64_HAS_LPA2 CPU capability KVM: arm64: Add new (V)TCR_EL2 field definitions for FEAT_LPA2 KVM: arm64: Use LPA2 page-tables for stage2 and hyp stage1 KVM: arm64: Convert translation level parameter to s8 KVM: arm64: Support up to 5 levels of translation in kvm_pgtable KVM: arm64: Allow guests with >48-bit IPA size on FEAT_LPA2 systems KVM: selftests: arm64: Determine max ipa size per-page size KVM: selftests: arm64: Support P52V48 4K and 16K guest_modes Will Deacon (1): KVM: arm64: Add missing memory barriers when switching to pKVM's hyp pgd arch/arm64/include/asm/cpufeature.h | 5 + arch/arm64/include/asm/esr.h | 15 + arch/arm64/include/asm/kvm_arm.h | 63 ++-- arch/arm64/include/asm/kvm_emulate.h | 34 +-- arch/arm64/include/asm/kvm_host.h | 138 ++++++--- arch/arm64/include/asm/kvm_nested.h | 56 +++- arch/arm64/include/asm/kvm_pgtable.h | 80 ++++-- arch/arm64/include/asm/kvm_pkvm.h | 5 +- arch/arm64/include/asm/pgtable-prot.h | 2 + arch/arm64/include/asm/sysreg.h | 25 ++ arch/arm64/include/asm/tlb.h | 15 +- arch/arm64/include/asm/tlbflush.h | 100 ++++--- arch/arm64/include/asm/vncr_mapping.h | 103 +++++++ arch/arm64/kernel/cpufeature.c | 41 ++- arch/arm64/kvm/arch_timer.c | 3 +- arch/arm64/kvm/arm.c | 11 + arch/arm64/kvm/emulate-nested.c | 63 ++++ arch/arm64/kvm/hyp/include/hyp/fault.h | 2 +- arch/arm64/kvm/hyp/include/hyp/switch.h | 93 ++++-- arch/arm64/kvm/hyp/include/nvhe/fixed_config.h | 22 +- arch/arm64/kvm/hyp/nvhe/hyp-init.S | 6 +- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 6 +- arch/arm64/kvm/hyp/nvhe/mm.c | 4 +- arch/arm64/kvm/hyp/nvhe/pkvm.c | 4 + arch/arm64/kvm/hyp/nvhe/setup.c | 2 +- arch/arm64/kvm/hyp/pgtable.c | 90 +++--- arch/arm64/kvm/mmu.c | 49 ++-- arch/arm64/kvm/nested.c | 22 +- arch/arm64/kvm/reset.c | 9 +- arch/arm64/kvm/sys_regs.c | 235 +++++++++++---- arch/arm64/kvm/vgic/vgic-its.c | 5 + arch/arm64/kvm/vgic/vgic-mmio-v3.c | 28 +- arch/arm64/kvm/vgic/vgic-mmio.c | 101 +++---- arch/arm64/tools/cpucaps | 1 + arch/arm64/tools/sysreg | 320 ++++++++++++++++++++- .../selftests/kvm/include/aarch64/processor.h | 4 +- tools/testing/selftests/kvm/include/guest_modes.h | 4 +- .../testing/selftests/kvm/include/kvm_util_base.h | 1 + .../testing/selftests/kvm/lib/aarch64/processor.c | 69 ++++- tools/testing/selftests/kvm/lib/guest_modes.c | 50 ++-- tools/testing/selftests/kvm/lib/kvm_util.c | 3 + 41 files changed, 1423 insertions(+), 466 deletions(-) create mode 100644 arch/arm64/include/asm/vncr_mapping.h