public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
	kvm@vger.kernel.org
Cc: James Morse <james.morse@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Oliver Upton <oliver.upton@linux.dev>,
	Zenghui Yu <yuzenghui@huawei.com>
Subject: [PATCH 00/11] KVM: arm64: Add support for FEAT_LS64 and co
Date: Thu, 15 Aug 2024 13:59:48 +0100	[thread overview]
Message-ID: <20240815125959.2097734-1-maz@kernel.org> (raw)

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(-)

-- 
2.39.2


             reply	other threads:[~2024-08-15 13:00 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-15 12:59 Marc Zyngier [this message]
2024-08-15 12:59 ` [PATCH 01/11] arm64: Expose ID_AA64ISAR1_EL1.XS to sanitised feature consumers Marc Zyngier
2024-08-15 12:59 ` [PATCH 02/11] arm64: Add syndrome information for trapped LD64B/ST64B{,V,V0} Marc Zyngier
2024-08-15 12:59 ` [PATCH 03/11] KVM: arm64: Add ACCDATA_EL1 to the sysreg array Marc Zyngier
2024-08-15 12:59 ` [PATCH 04/11] KVM: arm64: Add context-switch of ACCDATA_EL1 Marc Zyngier
2024-08-15 12:59 ` [PATCH 05/11] KVM: arm64: Handle trapping of FEAT_LS64* instructions Marc Zyngier
2024-08-15 12:59 ` [PATCH 06/11] KVM: arm64: Add exit to userspace on {LD,ST}64B* outside of memslots Marc Zyngier
2024-08-15 12:59 ` [PATCH 07/11] KVM: arm64: Restrict ACCDATA_EL1 undef to FEAT_ST64_ACCDATA being disabled Marc Zyngier
2024-08-15 12:59 ` [PATCH 08/11] KVM: arm64: Conditionnaly enable FEAT_LS64* instructions Marc Zyngier
2024-08-15 12:59 ` [PATCH 09/11] KVM: arm64: nv: Expose FEAT_LS64* to a nested guest Marc Zyngier
2024-08-15 12:59 ` [PATCH 10/11] arm64: Expose ID_AA64ISAR1_EL1.LS64 to sanitised feature consumers Marc Zyngier
2024-08-15 12:59 ` [PATCH 11/11] KVM: arm64: Add documentation for KVM_EXIT_ARM_LDST64B Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240815125959.2097734-1-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=james.morse@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=oliver.upton@linux.dev \
    --cc=suzuki.poulose@arm.com \
    --cc=yuzenghui@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox