Skip to content

KVM: arm64: Add support for FEAT_LS64 and co

Marc Zyngier kvm kvmarm linux-arm-kernel 1 version New

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest11 patches 0 repliesNew

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/11arm64: Expose ID_AA64ISAR1_EL1.XS to sanitised feature consumersarch/arm64/kernel/cpufeature.c+1 -00 replies
2/11arm64: Add syndrome information for trapped LD64B/ST64B{,V,V0}arch/arm64/include/asm/esr.h+7 -10 replies
3/11KVM: arm64: Add ACCDATA_EL1 to the sysreg arrayarch/arm64/include/asm/kvm_host.h arch/arm64/kvm/sys_regs.c+14 -10 replies
4/11KVM: arm64: Add context-switch of ACCDATA_EL1arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h+23 -60 replies
5/11KVM: arm64: Handle trapping of FEAT_LS64* instructionsarch/arm64/kvm/handle_exit.c+64 -00 replies
6/11KVM: arm64: Add exit to userspace on {LD,ST}64B* outside of memslotsarch/arm64/kvm/mmio.c include/uapi/linux/kvm.h+28 -20 replies
7/11KVM: arm64: Restrict ACCDATA_EL1 undef to FEAT_ST64_ACCDATA being disabledarch/arm64/kvm/sys_regs.c+3 -10 replies
8/11KVM: arm64: Conditionnaly enable FEAT_LS64* instructionsarch/arm64/kvm/sys_regs.c+9 -00 replies
9/11KVM: arm64: nv: Expose FEAT_LS64* to a nested guestarch/arm64/kvm/nested.c+2 -30 replies
10/11arm64: Expose ID_AA64ISAR1_EL1.LS64 to sanitised feature consumersarch/arm64/kernel/cpufeature.c+1 -00 replies
11/11KVM: arm64: Add documentation for KVM_EXIT_ARM_LDST64BDocumentation/virt/kvm/api.rst+36 -70 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 00/11] KVM: arm64: Add support for FEAT_LS64 and co

The ARM architecture has introduced a while back some 64 byte Load/Store operations that are targeting NormalNC or Device memory. People have been threatening of using this in actual code, so we might as well support it. It also fits my plans to cover the features enabled by HCRX_EL2.

From a KVM perspective, it is only a load/store. Nothing to call home about. However, there are two situations where this is interesting:

- a NV guest wants to trap these instructions: we need to correctly route them.

- the access falls outside of a memslot, and userspace needs to handle this.

This last point is of special interest. Instead of going through the pain of doing all the decoding in the kernel and presenting the VMM with a fully decoded access (like it is the case for normal MMIO), we brutally return the ESR+IPA and let userspace deal with the outcome, hijacking the data structures for KVM_EXIT_ARM_NISV for that purpose.

It has all the information at its disposal through the vcpu ioctl interface, and can definitely do what's asked. Just not very quickly

I don't think this is a problem, and that approximately 100% of the VMMs will simply inject an external abort as an indication that they are not handling this.

This is otherwise pretty uninteresting code.

Marc Zyngier (11):
arm64: Expose ID_AA64ISAR1_EL1.XS to sanitised feature consumers
arm64: Add syndrome information for trapped LD64B/ST64B{,V,V0}
KVM: arm64: Add ACCDATA_EL1 to the sysreg array
KVM: arm64: Add context-switch of ACCDATA_EL1
KVM: arm64: Handle trapping of FEAT_LS64* instructions
KVM: arm64: Add exit to userspace on {LD,ST}64B* outside of memslots
KVM: arm64: Restrict ACCDATA_EL1 undef to FEAT_ST64_ACCDATA being
disabled
KVM: arm64: Conditionnaly enable FEAT_LS64* instructions
KVM: arm64: nv: Expose FEAT_LS64* to a nested guest
arm64: Expose ID_AA64ISAR1_EL1.LS64 to sanitised feature consumers
KVM: arm64: Add documentation for KVM_EXIT_ARM_LDST64B

 Documentation/virt/kvm/api.rst             | 43 ++++++++++++---
 arch/arm64/include/asm/esr.h               |  8 ++-
 arch/arm64/include/asm/kvm_host.h          |  3 +
 arch/arm64/kernel/cpufeature.c             |  2 +
 arch/arm64/kvm/handle_exit.c               | 64 ++++++++++++++++++++++
 arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 29 ++++++++--
 arch/arm64/kvm/mmio.c                      | 27 ++++++++-
 arch/arm64/kvm/nested.c                    |  5 +-
 arch/arm64/kvm/sys_regs.c                  | 25 ++++++++-
 include/uapi/linux/kvm.h                   |  3 +-
 10 files changed, 188 insertions(+), 21 deletions(-)
Signature · 1 line
2.39.2