Add KVM_CAP_ARM_DISABLE_EXITS, modelled after the existing x86 KVM_CAP_X86_DISABLE_EXITS, to allow userspace to disable WFI and/or WFE trapping on a per-VM basis.
KVM already has system-wide kernel command line parameters (kvm-arm.wfi_trap_policy and kvm-arm.wfe_trap_policy, added in 0b5afe05377d) to control WFx trapping. However, these are global and set at boot time. A per-VM capability allows the VMM to make the decision per guest — for example, disabling WFI trapping for latency-sensitive VMs with pinned vCPUs while keeping it enabled for overcommitted guests on the same host. When a flag is set via KVM_ENABLE_CAP, the corresponding trap is unconditionally cleared, overriding the system-wide policy. When the flag is not set, the system policy (including the default single-task heuristic) applies as before. As with the x86 equivalent, disabling exits is a one-way operation per VM. Tested on Graviton 3 (Neoverse-V1) metal. David Woodhouse (2): KVM: arm64: Add KVM_CAP_ARM_DISABLE_EXITS for WFI/WFE passthrough KVM: arm64: selftests: Add KVM_CAP_ARM_DISABLE_EXITS UAPI test Documentation/virt/kvm/api.rst | 28 +++++++++++++ arch/arm64/include/asm/kvm_host.h | 4 ++ arch/arm64/kvm/arm.c | 20 ++++++++++ include/uapi/linux/kvm.h | 6 +++ tools/testing/selftests/kvm/Makefile.kvm | 1 + tools/testing/selftests/kvm/arm64/disable_exits.c | 48 +++++++++++++++++++++++ 6 files changed, 107 insertions(+) create mode 100644 tools/testing/selftests/kvm/arm64/disable_exits.c

