[PATCH v1 00/26] KVM: arm64 on s390 System Register Handling
From: Steffen Eiden
Date: Fri May 29 2026 - 12:17:49 EST
Add system register handling for KVM/arm64 on s390. Restructure and share
KVM/arm64 code, introduce ARM guest management functions for s390 hosts,
and implement host sysreg & exception handling.
Changes in detail:
arm64:
Refactor arm64 feature detection and ID register handling to make it
generic and reusable across architectures.
Restructure ID register storage and core register handling. Refactor core
registers to use functions instead of direct memory access.
Move arm64-specific definitions (CPU types, cache, KVM features, ID
registers, system registers) to shared locations for reuse by other
architectures.
s390:
Add s390 instruction support for ARM guest management: easr/sasr for
system register access, QAAF for feature queries, and ptff extensions
for guest time handling.
Implement complete sysreg handling for s390 including feature
sanitisation, register enumeration and access, exception injection,
and finalized page fault handling.
The series builds upon the foundation established in the first series and
requires the first series v3[1] as base.
Steffen
[1] https://lore.kernel.org/lkml/20260529155050.2902245-1-seiden@xxxxxxxxxxxxx/
Andreas Grapentin (1):
KVM: arm64: Fix set_oslsr_el1 to write to OSLAR_EL1
Steffen Eiden (25):
KVM: arm64: Extract some feature related changes to kvm_feature.h
KVM: arm64: Remove __expand_field_sign_(un)signed
KVM: arm64: Generalize get_idreg_field_*()
KVM: arm64: Generalize kvm_cmp_feat_*()
KVM: arm64: Generalize kvm_has_feat_*
KVM: arm64: Remove get_idreg_field_*() and kvm_cmp_feat_*()
KVM: arm64: Remove kvm_has_feat_range
KVM: arm64: Split up feature sysreg sanitisation
KVM: arm64: Refactor idreg caching into dedicated structure
KVM: arm64: Move definitions from sys_regs.c to sys_regs.h
KVM: arm64: Add PVM_ prefix to avoid name collisions
s390: Introduce read/write ARM sysreg instructions
s390: Introduce Query Available Arm features
s390: Add functions to query arm guest time
KVM: s390: arm64: Add sysreg related functions and definitions
arm64: Extract cputype definitions.
arm64: Extract cache definitions
KVM: arm64: Share KVM feature detection macros
KVM: arm64: Share ID reg handling
KVM: arm64: Share sys-reg handling
KVM: arm64: Refactor core reg handling
KVM: s390: arm64: Implement feature sanitisation
KVM: s390: arm64: Implement sysreg handling
KVM: s390: arm64: Implement exception injection
KVM: s390: arm64: Finalize page fault handling
arch/arm64/include/asm/cache.h | 19 +-
arch/arm64/include/asm/cputype.h | 246 +---
arch/arm64/include/asm/kvm_emulate.h | 1 +
arch/arm64/include/asm/kvm_feature.h | 27 +
arch/arm64/include/asm/kvm_host.h | 137 +-
arch/arm64/include/asm/kvm_nested.h | 1 +
arch/arm64/kvm/arm.c | 2 +-
arch/arm64/kvm/at.c | 1 +
arch/arm64/kvm/config.c | 3 +-
arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 1 +
arch/arm64/kvm/hyp/nvhe/hyp-main.c | 1 +
arch/arm64/kvm/hyp/nvhe/pkvm.c | 7 +-
arch/arm64/kvm/hyp/nvhe/sys_regs.c | 55 +-
arch/arm64/kvm/nested.c | 2 +-
arch/arm64/kvm/sys_regs.c | 1307 +----------------
arch/arm64/kvm/sys_regs.h | 276 ----
arch/arm64/kvm/trace_handle_exit.h | 36 +-
arch/arm64/kvm/vgic-sys-reg-v3.c | 2 +-
arch/arm64/kvm/vgic/vgic-init.c | 1 +
arch/arm64/kvm/vgic/vgic.h | 1 +
arch/s390/include/asm/kvm_emulate.h | 34 +
arch/s390/include/asm/kvm_feature.h | 111 ++
arch/s390/include/asm/kvm_host_arm64.h | 168 ++-
arch/s390/include/asm/kvm_host_arm64_types.h | 97 ++
arch/s390/include/asm/kvm_nested.h | 5 +
arch/s390/include/asm/sae-asm.h | 48 +
arch/s390/include/asm/sae.h | 86 ++
arch/s390/include/asm/timex.h | 49 +
arch/s390/kernel/dis.c | 1 +
arch/s390/kernel/time.c | 1 +
arch/s390/kvm/arm64/Makefile | 3 +
arch/s390/kvm/arm64/arm.c | 44 +-
arch/s390/kvm/arm64/exception.c | 105 ++
arch/s390/kvm/arm64/feature.c | 170 +++
arch/s390/kvm/arm64/guest.c | 20 +-
arch/s390/kvm/arm64/handle_exit.c | 1 +
arch/s390/kvm/arm64/inject_fault.c | 72 +-
arch/s390/kvm/arm64/mmu.c | 62 +-
arch/s390/kvm/arm64/reset.c | 5 +
arch/s390/kvm/arm64/sys_regs.c | 769 ++++++++++
arch/s390/kvm/arm64/trace.h | 33 +
arch/s390/tools/opcodes.txt | 3 +
include/arch/arm64/asm/cache-defs.h | 22 +
.../arch/arm64/asm/cputype-defs.h | 92 +-
include/arch/arm64/asm/sysreg-defs.h | 9 +
include/kvm/arm64/kvm_feature.h | 68 +
include/kvm/arm64/kvm_host.h | 52 +
include/kvm/arm64/sys_regs.h | 548 +++++++
virt/kvm/arm64/Makefile.kvm | 1 +
virt/kvm/arm64/guest.c | 100 +-
virt/kvm/arm64/mmio.c | 1 +
virt/kvm/arm64/sys_regs.c | 1039 +++++++++++++
virt/kvm/arm64/trace.h | 34 +
53 files changed, 3838 insertions(+), 2141 deletions(-)
create mode 100644 arch/arm64/include/asm/kvm_feature.h
delete mode 100644 arch/arm64/kvm/sys_regs.h
create mode 100644 arch/s390/include/asm/kvm_feature.h
create mode 100644 arch/s390/include/asm/sae-asm.h
create mode 100644 arch/s390/kvm/arm64/exception.c
create mode 100644 arch/s390/kvm/arm64/feature.c
create mode 100644 arch/s390/kvm/arm64/sys_regs.c
create mode 100644 arch/s390/kvm/arm64/trace.h
create mode 100644 include/arch/arm64/asm/cache-defs.h
copy arch/arm64/include/asm/cputype.h => include/arch/arm64/asm/cputype-defs.h (85%)
create mode 100644 include/kvm/arm64/kvm_feature.h
create mode 100644 include/kvm/arm64/sys_regs.h
create mode 100644 virt/kvm/arm64/sys_regs.c
base-commit: 4095afb932d1a98a6fcb3f4f490964949d0de338
--
2.53.0