This series implements support for allowing KVM guests to use the Arm Scalable Vector Extension (SVE), superseding the previous v6 series [1]. The patches are also available on a branch for reviewer convenience. [2] The patches are based on v5.1-rc2. This series addresses a couple of minor review comments received on v6 and otherwise applies reviewer tags only. The code differences between v6 and this series consist of minor cosmetic fixups only. Draft kvmtool patches were posted separately [3], [4]. For a description of minor updates, see the individual patches. Thanks go to Julien Thierry and Julian Grall for their review efforts, and to Zhang Lei for testing the series -- many thanks for their help in getting the series to this point! Reviewers' attention is drawn to the following patches, which have no Reviewed-by/Acked-by. Please take a look if you have a moment. * Patch 11 (KVM: arm64: Support runtime sysreg visibility filtering) Previously Reviewed-by Julien Thierry, but this version of the patch contains some minor rework suggested by Mark Rutland during the v5 review [5]. * Patch 15 (KVM: arm64: Add missing #include of <linux/string.h> in guest.c) (Trivial patch.) * Patch 26: (KVM: Document errors for KVM_GET_ONE_REG and KVM_SET_ONE_REG) (Documentation only.) * Patch 27: KVM: arm64/sve: Document KVM API extensions for SVE (Documentation only.) Known issues: none Testing status: * Lightweight testing on the Arm Fast Model, primarily to exercise the new vcpu finalization API. Ran sve-stress testing for several days on v6 on the Arm Fast Model, with no errors observed. * ThunderX2: basic testing of arm64 defconfig, including booting guests (no SVE support on this hardware). Some stress testing with fpsimd-stress (to be published separately) and paranoia, with no problems observed over several days. This testing was done on v6. * aarch32 host testing has only been done in v5 so far. arch/arm changes between v5 and v7 are minimal. I plan to redo sanity-check testing after this posting. [1] Previous series: [PATCH v5 00/26] KVM: arm64: SVE guest support https://lists.cs.columbia.edu/pipermail/kvmarm/2019-March/thread.html (Note, the subject line for this posting was incorrect. It should have read: [PATCH v6 00/27] KVM: arm64: SVE guest support) [2] This series in git: http://linux-arm.org/git?p=linux-dm.git;a=shortlog;h=refs/heads/sve-kvm/v7/head git://linux-arm.org/linux-dm.git sve-kvm/v7/head [3] [PATCH kvmtool v2 0/3] arm64: Basic SVE guest support https://lists.cs.columbia.edu/pipermail/kvmarm/2019-March/035198.html [4] git://linux-arm.org/kvmtool-dm.git sve-linuxv6/v2/head http://linux-arm.org/git?p=kvmtool-dm.git;a=shortlog;h=refs/heads/sve-linuxv6/v2/head [5] Mark Rutland Re: [PATCH v5 12/26] KVM: arm64: Support runtime sysreg visibility filtering https://lists.cs.columbia.edu/pipermail/kvmarm/2019-February/034718.html Dave Martin (27): KVM: Documentation: Document arm64 core registers in detail arm64: fpsimd: Always set TIF_FOREIGN_FPSTATE on task state flush KVM: arm64: Delete orphaned declaration for __fpsimd_enabled() KVM: arm64: Refactor kvm_arm_num_regs() for easier maintenance KVM: arm64: Add missing #includes to kvm_host.h arm64/sve: Clarify role of the VQ map maintenance functions arm64/sve: Check SVE virtualisability arm64/sve: Enable SVE state tracking for non-task contexts KVM: arm64: Add a vcpu flag to control SVE visibility for the guest KVM: arm64: Propagate vcpu into read_id_reg() KVM: arm64: Support runtime sysreg visibility filtering KVM: arm64/sve: System register context switch and access support KVM: arm64/sve: Context switch the SVE registers KVM: Allow 2048-bit register access via ioctl interface KVM: arm64: Add missing #include of <linux/string.h> in guest.c KVM: arm64: Factor out core register ID enumeration KVM: arm64: Reject ioctl access to FPSIMD V-regs on SVE vcpus KVM: arm64/sve: Add SVE support to register access ioctl interface KVM: arm64: Enumerate SVE register indices for KVM_GET_REG_LIST arm64/sve: In-kernel vector length availability query interface KVM: arm/arm64: Add hook for arch-specific KVM initialisation KVM: arm/arm64: Add KVM_ARM_VCPU_FINALIZE ioctl KVM: arm64/sve: Add pseudo-register for the guest's vector lengths KVM: arm64/sve: Allow userspace to enable SVE for vcpus KVM: arm64: Add a capability to advertise SVE support KVM: Document errors for KVM_GET_ONE_REG and KVM_SET_ONE_REG KVM: arm64/sve: Document KVM API extensions for SVE Documentation/virtual/kvm/api.txt | 156 +++++++++++++++ arch/arm/include/asm/kvm_host.h | 6 + arch/arm64/include/asm/fpsimd.h | 33 +++- arch/arm64/include/asm/kvm_host.h | 43 ++++- arch/arm64/include/asm/kvm_hyp.h | 1 - arch/arm64/include/asm/sysreg.h | 3 + arch/arm64/include/uapi/asm/kvm.h | 22 +++ arch/arm64/kernel/cpufeature.c | 2 +- arch/arm64/kernel/fpsimd.c | 172 ++++++++++++----- arch/arm64/kernel/signal.c | 5 - arch/arm64/kvm/fpsimd.c | 17 +- arch/arm64/kvm/guest.c | 394 +++++++++++++++++++++++++++++++++++--- arch/arm64/kvm/hyp/switch.c | 74 +++++-- arch/arm64/kvm/reset.c | 135 ++++++++++++- arch/arm64/kvm/sys_regs.c | 130 +++++++++++-- arch/arm64/kvm/sys_regs.h | 25 +++ include/uapi/linux/kvm.h | 5 + virt/kvm/arm/arm.c | 22 +++ 18 files changed, 1115 insertions(+), 130 deletions(-) -- 2.1.4 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm