Re: [PATCH v16 00/45] arm64: Support for Arm CCA in KVM
Fuad Tabba <[email protected]> Tue, 4 Aug 2026 15:24:00 +0100
| Newsgroups | dev.linux.lists.kvmarm,dev.linux.lists.linux-coco,org.infradead.lists.linux-arm-kernel,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CA+EHjTy4tpv+d7Q0H1Coe4PXAFrvHc8_fiOyv8GXdo7y7CNMdA@mail.gmail.com> |
Hi Steven, On Mon, 3 Aug 2026 at 14:44, Steven Price <[email protected]> wrote: ... > * Rewrite Realm entry and exit handling to fit into the generic KVM > run loop. Work which cannot be performed in the entry path is now > completed through KVM requests, and MMIO, PSCI, RIPAS changes and > host calls are adapted to the new flow. Reading v16 with pKVM in mind: this rework helps, but the series still adds a few kvm_is_realm()/vcpu_is_rec() checks to the core arm64 code, and several sit next to, or inside the same condition as, the existing pKVM checks (the nommu path in kvm_arch_vcpu_load(), the timer offsets, the NISV abort injection). Both checks answer the same question: is the guest's state owned by something other than KVM. It might be worth a common predicate covering both. Cheers, /fuad > > * Rewrite Realm timer support to use KVM's IRQ-ops infrastructure and > software resampling. > > * Improve SRO cancellation and error handling. Ensure a cancelled > operation isn't treated as successful, wrapper return values can carry > negative Linux errors as well as RMI return values, and those errors > are propagated through the KVM users. > > * Check that the RMM supports the host page size before configuring it, > and exclude firmware-reserved NOMAP memory when creating GPT entries. > > * Expand the KVM_ARM_RMI_POPULATE documentation to make clear that Arm > CCA cannot preserve memory contents during an in-place > shared-to-private conversion. > > * Allocate Realm parameters only while creating the Realm descriptor. > > * Document the encoding of the arm64 VM types and require > ICH_HCR_EL2.TDIR before advertising or creating Realm VMs. > > This series is based on the guest_memfd in-place conversion v9 tree[1], > which is itself based on kvm-x86/next. It is also available as a git > repository: > > https://gitlab.arm.com/linux-arm/linux-cca cca-host/v16 > > Work in progress changes for kvmtool are available from the git > repository below: > > https://gitlab.arm.com/linux-arm/kvmtool-cca cca/v13 > > The TF-RMM branch used for testing this series is available here: > > https://git.trustedfirmware.org/TF-RMM/tf-rmm.git topics/rmm-v2.0-poc_3 > > There is a kvm-unit-test branch updated to support the attestation used > in RMM v2.0 available here: > > https://gitlab.arm.com/linux-arm/kvm-unit-tests-cca cca/v4 > > [0] https://developer.arm.com/documentation/den0137/2-0bet2/ > One bet2 change, which moves metadata out of the individual address > range descriptors, has intentionally not been implemented because that > part of the specification is expected to be reverted. > > [1] https://github.com/googleprodkernel/linux-cc/commits/guest_memfd-inplace-conversion-v9 > > Jean-Philippe Brucker (6): > KVM: arm64: CCA: Propagate breakpoint and watchpoint counts to > userspace > KVM: arm64: CCA: Set breakpoint parameters through SET_ONE_REG > KVM: arm64: CCA: Propagate max SVE vector length from the RMM > KVM: arm64: CCA: Configure max SVE vector length for a Realm > KVM: arm64: CCA: Provide register list for unfinalized RECs > KVM: arm64: CCA: Provide an accurate register list > > Joey Gouly (2): > KVM: arm64: CCA: Allow userspace to inject aborts > KVM: arm64: CCA: Support RSI_HOST_CALL > > Steven Price (34): > firmware: arm_rmm: Add SMC definitions for calling the RMM > firmware: arm_rmm: Add wrappers for direct RMI calls > firmware: arm_rmm: Check for RMI support at init > firmware: arm_rmm: Configure the RMM with the host's page size > firmware: arm_rmm: Add support for SRO > firmware: arm_rmm: Ensure the RMM has GPT entries for memory > arm64: mm: Handle Granule Protection Faults (GPFs) > KVM: arm64: Avoid including linux/kvm_host.h in kvm_pgtable.h > KVM: arm64: CCA: Add wrappers for realm related RMIs > KVM: arm64: CCA: Check for RMI support at KVM init > KVM: arm64: CCA: Check for LPA2 support > KVM: arm64: CCA: Define the user ABI > KVM: arm64: CCA: Add basic infrastructure for creating a realm > KVM: arm64: CCA: Allow passing the machine type in KVM creation > KVM: arm64: CCA: Tear down RTTs > KVM: arm64: CCA: Allocate and free RECs to match vCPUs > KVM: arm64: CCA: Support the VGIC in realms > KVM: arm64: CCA: Support timers in realm RECs > KVM: arm64: CCA: Handle realm enter/exit > KVM: arm64: CCA: Handle RMI_EXIT_RIPAS_CHANGE > KVM: arm64: CCA: Handle realm MMIO emulation > KVM: arm64: Expose support for private memory > KVM: arm64: CCA: Create the realm descriptor > KVM: arm64: CCA: Activate realms on first vCPU run > KVM: arm64: CCA: Allow populating initial contents > KVM: arm64: CCA: Set RIPAS of initial memslots > KVM: arm64: CCA: Support runtime faulting of memory > KVM: arm64: CCA: Handle realm vCPU load > KVM: arm64: CCA: Validate register access for Realm VMs > KVM: arm64: CCA: Handle Realm PSCI requests > KVM: arm64: WARN on injected undef exceptions > KVM: arm64: CCA: Prevent Device mappings for realms > KVM: arm64: CCA: Require ICH_HCR_EL2.TDIR for realms > KVM: arm64: CCA: Enable realms to be created > > Suzuki K Poulose (3): > KVM: arm64: Include kvm_emulate.h in kvm/arm_psci.h > KVM: arm64: CCA: Don't expose unsupported capabilities for realm > guests > KVM: arm64: CCA: Allow checking SVE on VM instance > > Documentation/virt/kvm/api.rst | 70 +- > arch/arm64/Kconfig | 1 + > arch/arm64/include/asm/kvm_asm.h | 2 + > arch/arm64/include/asm/kvm_emulate.h | 37 + > arch/arm64/include/asm/kvm_host.h | 12 +- > arch/arm64/include/asm/kvm_pgtable.h | 6 +- > arch/arm64/include/asm/kvm_pkvm.h | 2 +- > arch/arm64/include/asm/kvm_rmi.h | 139 +++ > arch/arm64/include/asm/rmi_cmds.h | 465 ++++++++ > arch/arm64/include/asm/virt.h | 1 + > arch/arm64/kernel/cpufeature.c | 1 + > arch/arm64/kvm/Kconfig | 2 + > arch/arm64/kvm/Makefile | 2 +- > arch/arm64/kvm/arch_timer.c | 34 +- > arch/arm64/kvm/arm.c | 139 ++- > arch/arm64/kvm/guest.c | 93 +- > arch/arm64/kvm/handle_exit.c | 14 + > arch/arm64/kvm/hyp/pgtable.c | 1 + > arch/arm64/kvm/hypercalls.c | 4 +- > arch/arm64/kvm/inject_fault.c | 5 +- > arch/arm64/kvm/mmio.c | 16 +- > arch/arm64/kvm/mmu.c | 144 ++- > arch/arm64/kvm/reset.c | 13 +- > arch/arm64/kvm/rmi-exit.c | 178 +++ > arch/arm64/kvm/rmi.c | 1561 ++++++++++++++++++++++++++ > arch/arm64/kvm/sys_regs.c | 47 +- > arch/arm64/kvm/vgic/vgic-init.c | 2 +- > arch/arm64/mm/fault.c | 28 +- > drivers/firmware/Kconfig | 1 + > drivers/firmware/Makefile | 1 + > drivers/firmware/arm_rmm/Kconfig | 26 + > drivers/firmware/arm_rmm/Makefile | 2 + > drivers/firmware/arm_rmm/rmi.c | 776 +++++++++++++ > include/kvm/arm_psci.h | 2 + > include/linux/arm-rmi-cmds.h | 201 ++++ > include/linux/arm-smccc-rmi.h | 493 ++++++++ > include/uapi/linux/kvm.h | 20 +- > 37 files changed, 4446 insertions(+), 95 deletions(-) > create mode 100644 arch/arm64/include/asm/kvm_rmi.h > create mode 100644 arch/arm64/include/asm/rmi_cmds.h > create mode 100644 arch/arm64/kvm/rmi-exit.c > create mode 100644 arch/arm64/kvm/rmi.c > create mode 100644 drivers/firmware/arm_rmm/Kconfig > create mode 100644 drivers/firmware/arm_rmm/Makefile > create mode 100644 drivers/firmware/arm_rmm/rmi.c > create mode 100644 include/linux/arm-rmi-cmds.h > create mode 100644 include/linux/arm-smccc-rmi.h > > -- > 2.43.0 >