Re: [PATCH 0/8] KVM: arm64: Rework pKVM vCPU state synchronisation
From: Fuad Tabba
Date: Fri Jun 19 2026 - 03:07:22 EST
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@xxxxxxxxxx> 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@xxxxxxxxxx/
> [2] https://lore.kernel.org/all/20260612065925.755562-1-tabba@xxxxxxxxxx/
>
> 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
>