[PATCH v5 0/8] KVM: arm64: pKVM vCPU state management at EL2 (series A)

Fuad Tabba posted 8 patches 1 week, 4 days ago
arch/arm64/include/asm/kvm_arm.h     |  12 ++
arch/arm64/include/asm/kvm_asm.h     |   1 +
arch/arm64/include/asm/kvm_emulate.h |  77 ++++++++
arch/arm64/include/asm/kvm_host.h    |   6 +-
arch/arm64/kvm/arm.c                 |   7 +
arch/arm64/kvm/handle_exit.c         |  23 +++
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            |  18 +-
arch/arm64/kvm/sys_regs.h            |  19 ++
include/kvm/arm_psci.h               |  27 +++
13 files changed, 408 insertions(+), 164 deletions(-)
[PATCH v5 0/8] KVM: arm64: pKVM vCPU state management at EL2 (series A)
Posted by Fuad Tabba 1 week, 4 days ago
Hi folks,

Changes since v4 [1]:
  - Renamed the sys register accessors: vcpu_{read,write}_sys_reg() are
    now the context-dispatching wrappers valid in any context, and the
    host-only implementations are __vcpu_{read,write}_sysreg_vhe(). This
    avoids introducing a kvm_vcpu_ prefix that would be easy to confuse
    with vcpu_. (Oliver)
  - Dropped Vincent's Reviewed-by on the sys register accessor patch,
    since it changed materially with the rename.
  - Rebased onto v7.2-rc3.

Building on Will's pKVM infrastructure series [2], 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 v7.2-rc3 (a13c140cc289c).

Cheers,
/fuad

[1] https://lore.kernel.org/all/20260706095927.560795-1-fuad.tabba@linux.dev/
[2] https://lore.kernel.org/all/20260105154939.11041-1-will@kernel.org/

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 |  77 ++++++++
 arch/arm64/include/asm/kvm_host.h    |   6 +-
 arch/arm64/kvm/arm.c                 |   7 +
 arch/arm64/kvm/handle_exit.c         |  23 +++
 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            |  18 +-
 arch/arm64/kvm/sys_regs.h            |  19 ++
 include/kvm/arm_psci.h               |  27 +++
 13 files changed, 408 insertions(+), 164 deletions(-)


base-commit: a13c140cc289c0b7b3770bce5b3ad42ab35074aa
-- 
2.39.5