[PATCH 0/8] KVM: arm64: Rework pKVM vCPU state synchronisation

Fuad Tabba tabba at google.com
Fri Jun 19 00:06:35 PDT 2026


Sorry, as the emails were being sent, I realized I forgot the V2 in
the subject. Resending now. Sorry for the noise.

Cheers,
/fuad

On Fri, 19 Jun 2026 at 08:05, Fuad Tabba <tabba at google.com> wrote:
>
> Hi folks,
>
> Changes since v1 [2]:
>   - Dropped the guard()/scoped_guard() conversion patches: standalone churn
>     on code this series does not otherwise rework. (Marc)
>   - Rebased onto kvmarm/next. The VGIC flush primitive now bounds used_lrs
>     using the cached hyp_gicv3_nr_lr instead of reading ICH_VTR_EL2 on every
>     entry. (Marc)
>   - Grouped the PKVM_HOST_STATE_DIRTY flag with the other iflags and
>     clarified its comment. (Marc)
>   - Sync PSTATE alongside PC on every non-protected exit, and sync+dirty
>     before host-side SError injection so the syndrome is not dropped. (sashiko)
>   - Various cleanups and tidying up. (Vincent)
>
> Building on Will's pKVM infrastructure series [1], this series reworks
> how pKVM moves vCPU state between the host and EL2, and stops copying a
> non-protected guest's state on every world switch.
>
> EL2 gains proper primitives for the state it transfers: vCPU lookup
> helpers, and VGIC flush/sync that reduces how much host state EL2
> dereferences. The series also moves some preparatory code (such as sys
> reg access and PSCI helpers) to shared headers and HYP, and implements
> lazy copying of a non-protected guest's register state back to the host
> until the host actually needs it, instead of on every exit.
>
> This is the first of two series moving pKVM vCPU state management to
> EL2. The follow-up completes the job for protected VMs: state
> isolation, PSCI handling at EL2, and the resulting API behaviour.
>
> The series is structured as follows:
>
>   01-04:  Preparatory refactoring (MPIDR, sys reg access, vCPU reset, PSCI
>           helpers) to shared headers and HYP.
>   05:     Host and hypervisor vCPU lookup primitives.
>   06-07:  VGIC: reduce EL2's exposure to host state, add flush/sync primitives.
>   08:     Lazy state sync for non-protected guests.
>
> Based on kvmarm/next.
>
> [1] https://lore.kernel.org/all/20260105154939.11041-1-will@kernel.org/
> [2] https://lore.kernel.org/all/20260612065925.755562-1-tabba@google.com/
>
> Cheers,
> /fuad
>
> Fuad Tabba (5):
>   KVM: arm64: Extract MPIDR computation into a shared header
>   KVM: arm64: Make vcpu_{read,write}_sys_reg available to HYP code
>   KVM: arm64: Factor out reusable vCPU reset helpers
>   KVM: arm64: Move PSCI helper functions to a shared header
>   KVM: arm64: Implement lazy vCPU state sync for non-protected guests
>
> Marc Zyngier (3):
>   KVM: arm64: Add host and hypervisor vCPU lookup primitives
>   KVM: arm64: Minimise EL2's exposure of host VGIC state during world
>     switch
>   KVM: arm64: Add primitives to flush/sync the VGIC state at EL2
>
>  arch/arm64/include/asm/kvm_arm.h     |  12 ++
>  arch/arm64/include/asm/kvm_asm.h     |   1 +
>  arch/arm64/include/asm/kvm_emulate.h |  79 +++++++-
>  arch/arm64/include/asm/kvm_host.h    |   2 +
>  arch/arm64/kvm/arm.c                 |   7 +
>  arch/arm64/kvm/handle_exit.c         |  30 ++++
>  arch/arm64/kvm/hyp/exception.c       |  34 +---
>  arch/arm64/kvm/hyp/nvhe/hyp-main.c   | 258 +++++++++++++++++++++++----
>  arch/arm64/kvm/psci.c                |  30 +---
>  arch/arm64/kvm/reset.c               |  60 +------
>  arch/arm64/kvm/sys_regs.c            |  14 +-
>  arch/arm64/kvm/sys_regs.h            |  19 ++
>  include/kvm/arm_psci.h               |  27 +++
>  13 files changed, 410 insertions(+), 163 deletions(-)
>
> --
> 2.55.0.rc0.738.g0c8ab3ebcc-goog
>



More information about the linux-arm-kernel mailing list