All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/7] Add support for FEAT_{LS64, LS64_V} and related tests
@ 2025-06-26  8:08 Yicong Yang
  2025-06-26  8:09 ` [PATCH v3 1/7] KVM: arm64: Add exit to userspace on {LD,ST}64B* outside of memslots Yicong Yang
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Yicong Yang @ 2025-06-26  8:08 UTC (permalink / raw)
  To: catalin.marinas, will, maz, oliver.upton, corbet,
	linux-arm-kernel, kvmarm, linux-kselftest, linux-doc
  Cc: joey.gouly, suzuki.poulose, yuzenghui, shuah, jonathan.cameron,
	shameerali.kolothum.thodi, linuxarm, prime.zeng, xuwei5,
	yangyicong, tangchengchang, wangzhou1

From: Yicong Yang <yangyicong@hisilicon.com>

Armv8.7 introduces single-copy atomic 64-byte loads and stores
instructions and its variants named under FEAT_{LS64, LS64_V}.
Add support for Armv8.7 FEAT_{LS64, LS64_V}:
- Add identifying and enabling in the cpufeature list
- Expose the support of these features to userspace through HWCAP3
  and cpuinfo
- Add related hwcap test
- Handle the trap of unsupported memory (normal/uncacheable) access in a VM

A real scenario for this feature is that the userspace driver can make use of
this to implement direct WQE (workqueue entry) - a mechanism to fill WQE
directly into the hardware.

Picked Marc's 2 patches form [1] for handling the LS64 trap in a VM on emulated
MMIO and the introduce of KVM_EXIT_ARM_LDST64B.

[1] https://lore.kernel.org/linux-arm-kernel/20240815125959.2097734-1-maz@kernel.org/

Tested with hwcap test [*]:
[*] https://lore.kernel.org/linux-arm-kernel/20250331094320.35226-5-yangyicong@huawei.com/
On host:
root@localhost:/tmp# dmesg | grep "All CPU(s) started"
[    0.504846] CPU: All CPU(s) started at EL2
root@localhost:/tmp# ./hwcap
[...]
# LS64 present
ok 217 cpuinfo_match_LS64
ok 218 sigill_LS64
ok 219 # SKIP sigbus_LS64
# LS64_V present
ok 220 cpuinfo_match_LS64_V
ok 221 sigill_LS64_V
ok 222 # SKIP sigbus_LS64_V
# 115 skipped test(s) detected. Consider enabling relevant config options to improve coverage.
# Totals: pass:107 fail:0 xfail:0 xpass:0 skip:115 error:0

On guest:
root@localhost:/# dmesg | grep "All CPU(s) started"
[    0.451482] CPU: All CPU(s) started at EL1
root@localhost:/mnt# ./hwcap
[...]
# LS64 present
ok 217 cpuinfo_match_LS64
ok 218 sigill_LS64
ok 219 # SKIP sigbus_LS64
# LS64_V present
ok 220 cpuinfo_match_LS64_V
ok 221 sigill_LS64_V
ok 222 # SKIP sigbus_LS64_V
# 115 skipped test(s) detected. Consider enabling relevant config options to improve coverage.
# Totals: pass:107 fail:0 xfail:0 xpass:0 skip:115 error:0

Change since v2:
- Handle the LS64 fault to userspace and allow userspace to inject LS64 fault
- Reorder the patches to make KVM handling prior to feature support
Link: https://lore.kernel.org/linux-arm-kernel/20250331094320.35226-1-yangyicong@huawei.com/

Change since v1:
- Drop the support for LS64_ACCDATA
- handle the DABT of unsupported memory type after checking the memory attributes
Link: https://lore.kernel.org/linux-arm-kernel/20241202135504.14252-1-yangyicong@huawei.com/

Marc Zyngier (2):
  KVM: arm64: Add exit to userspace on {LD,ST}64B* outside of memslots
  KVM: arm64: Add documentation for KVM_EXIT_ARM_LDST64B

Yicong Yang (5):
  KVM: arm64: Handle DABT caused by LS64* instructions on unsupported
    memory
  KVM: arm/arm64: Allow user injection of unsupported exclusive/atomic
    DABT
  arm64: Provide basic EL2 setup for FEAT_{LS64, LS64_V} usage at EL0/1
  arm64: Add support for FEAT_{LS64, LS64_V}
  KVM: arm64: Enable FEAT_{LS64, LS64_V} in the supported guest

 Documentation/arch/arm64/booting.rst    | 12 ++++++
 Documentation/arch/arm64/elf_hwcaps.rst |  6 +++
 Documentation/virt/kvm/api.rst          | 43 +++++++++++++++++----
 arch/arm64/include/asm/el2_setup.h      | 12 +++++-
 arch/arm64/include/asm/esr.h            |  8 ++++
 arch/arm64/include/asm/hwcap.h          |  2 +
 arch/arm64/include/asm/kvm_emulate.h    |  7 ++++
 arch/arm64/include/uapi/asm/hwcap.h     |  2 +
 arch/arm64/include/uapi/asm/kvm.h       |  3 +-
 arch/arm64/kernel/cpufeature.c          | 51 +++++++++++++++++++++++++
 arch/arm64/kernel/cpuinfo.c             |  2 +
 arch/arm64/kvm/guest.c                  |  4 ++
 arch/arm64/kvm/inject_fault.c           | 29 ++++++++++++++
 arch/arm64/kvm/mmio.c                   | 27 ++++++++++++-
 arch/arm64/kvm/mmu.c                    | 21 +++++++++-
 arch/arm64/tools/cpucaps                |  2 +
 include/uapi/linux/kvm.h                |  3 +-
 17 files changed, 222 insertions(+), 12 deletions(-)

-- 
2.24.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2025-07-01 12:31 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26  8:08 [PATCH v3 0/7] Add support for FEAT_{LS64, LS64_V} and related tests Yicong Yang
2025-06-26  8:09 ` [PATCH v3 1/7] KVM: arm64: Add exit to userspace on {LD,ST}64B* outside of memslots Yicong Yang
2025-06-26  8:09 ` [PATCH v3 2/7] KVM: arm64: Add documentation for KVM_EXIT_ARM_LDST64B Yicong Yang
2025-06-26  8:09 ` [PATCH v3 3/7] KVM: arm64: Handle DABT caused by LS64* instructions on unsupported memory Yicong Yang
2025-06-26  8:51   ` Marc Zyngier
2025-06-26 11:39     ` Yicong Yang
2025-06-27 13:12       ` Marc Zyngier
2025-07-01 12:31         ` Yicong Yang
2025-06-26  8:09 ` [PATCH v3 4/7] KVM: arm/arm64: Allow user injection of unsupported exclusive/atomic DABT Yicong Yang
2025-06-26  8:11   ` Yicong Yang
2025-06-26  8:09 ` [PATCH v3 5/7] arm64: Provide basic EL2 setup for FEAT_{LS64, LS64_V} usage at EL0/1 Yicong Yang
2025-06-26  8:09 ` [PATCH v3 6/7] arm64: Add support for FEAT_{LS64, LS64_V} Yicong Yang
2025-06-26  8:09 ` [PATCH v3 7/7] KVM: arm64: Enable FEAT_{LS64, LS64_V} in the supported guest Yicong Yang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.