From 06477d238696f46941eb79b99b1805298efcf99d Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Wed, 11 Sep 2024 13:02:28 +0200 Subject: sys/linux/dev_kvm.txt: correctly pass ARM64 CPU features Certain ioctls accept CPU features as numbers in the range 0..6 (aka KVM_ARM_VCPU_POWER_OFF..KVM_ARM_VCPU_SVE), whereas other ioctls accept them as a bit mask. --- sys/linux/dev_kvm.txt | 17 +++++++++++++++-- sys/linux/dev_kvm.txt.const | 7 +++++++ 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'sys') diff --git a/sys/linux/dev_kvm.txt b/sys/linux/dev_kvm.txt index 54da3b0cf..3b1a4b404 100644 --- a/sys/linux/dev_kvm.txt +++ b/sys/linux/dev_kvm.txt @@ -162,6 +162,7 @@ ioctl$KVM_X86_SETUP_MCE(fd fd_kvmcpu, cmd const[KVM_X86_SETUP_MCE], arg ptr[in, ioctl$KVM_X86_SET_MCE(fd fd_kvmcpu, cmd const[KVM_X86_SET_MCE], arg ptr[in, kvm_x86_mce]) ioctl$KVM_ARM_VCPU_INIT(fd fd_kvmcpu, cmd const[KVM_ARM_VCPU_INIT], arg ptr[in, kvm_vcpu_init]) +# KVM_ARM_VCPU_FINALIZE accepts a single CPU feature encoded as a bit number: https://docs.kernel.org/virt/kvm/api.html#kvm-arm-vcpu-finalize. ioctl$KVM_ARM_VCPU_FINALIZE(fd fd_kvmcpu, cmd const[KVM_ARM_VCPU_FINALIZE], arg ptr[in, flags[kvm_vcpu_features_arm64, int32]]) ioctl$KVM_ARM_SET_DEVICE_ADDR(fd fd_kvmcpu, cmd const[KVM_ARM_SET_DEVICE_ADDR], arg ptr[in, kvm_arm_device_addr]) ioctl$KVM_ARM_SET_COUNTER_OFFSET(fd fd_kvmvm, cmd const[KVM_ARM_SET_COUNTER_OFFSET], arg ptr[in, kvm_arm_counter_offset]) @@ -215,7 +216,17 @@ kvm_mcg_status = MCG_STATUS_RIPV, MCG_STATUS_EIPV, MCG_STATUS_MCIP, MCG_STATUS_L kvm_mce_status = MCI_STATUS_VAL, MCI_STATUS_OVER, MCI_STATUS_UC, MCI_STATUS_EN, MCI_STATUS_MISCV, MCI_STATUS_ADDRV, MCI_STATUS_PCC, MCI_STATUS_S, MCI_STATUS_AR kvm_cpuid_flags = KVM_CPUID_FLAG_SIGNIFCANT_INDEX, KVM_CPUID_FLAG_STATEFUL_FUNC, KVM_CPUID_FLAG_STATE_READ_NEXT kvm_vcpu_target = KVM_ARM_TARGET_CORTEX_A53, KVM_ARM_TARGET_AEM_V8, KVM_ARM_TARGET_FOUNDATION_V8, KVM_ARM_TARGET_CORTEX_A57, KVM_ARM_TARGET_XGENE_POTENZA, KVM_ARM_TARGET_GENERIC_V8 + +# Some ioctls accept single CPU features as `bitnr`, whereas others take a set of `1 << bitnr`. +define KVM_ARM_VCPU_POWER_OFF_BIT (1 << KVM_ARM_VCPU_POWER_OFF) +define KVM_ARM_VCPU_EL1_32BIT_BIT (1 << KVM_ARM_VCPU_EL1_32BIT) +define KVM_ARM_VCPU_PSCI_0_2_BIT (1 << KVM_ARM_VCPU_PSCI_0_2) +define KVM_ARM_VCPU_PMU_V3_BIT (1 << KVM_ARM_VCPU_PMU_V3) +define KVM_ARM_VCPU_PTRAUTH_ADDRESS_BIT (1 << KVM_ARM_VCPU_PTRAUTH_ADDRESS) +define KVM_ARM_VCPU_PTRAUTH_GENERIC_BIT (1 << KVM_ARM_VCPU_PTRAUTH_GENERIC) +define KVM_ARM_VCPU_SVE_BIT (1 << KVM_ARM_VCPU_SVE) kvm_vcpu_features_arm64 = KVM_ARM_VCPU_POWER_OFF, KVM_ARM_VCPU_EL1_32BIT, KVM_ARM_VCPU_PSCI_0_2, KVM_ARM_VCPU_PMU_V3, KVM_ARM_VCPU_PTRAUTH_ADDRESS, KVM_ARM_VCPU_PTRAUTH_GENERIC, KVM_ARM_VCPU_SVE +kvm_vcpu_feature_bits_arm64 = KVM_ARM_VCPU_POWER_OFF_BIT, KVM_ARM_VCPU_EL1_32BIT_BIT, KVM_ARM_VCPU_PSCI_0_2_BIT, KVM_ARM_VCPU_PMU_V3_BIT, KVM_ARM_VCPU_PTRAUTH_ADDRESS_BIT, KVM_ARM_VCPU_PTRAUTH_GENERIC_BIT, KVM_ARM_VCPU_SVE_BIT kvm_dirty_log_protect = KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE, KVM_DIRTY_LOG_INITIALLY_SET kvm_dirty_log_sizes = 4096, 8192, 16384, 32768, 65536 @@ -438,9 +449,10 @@ kvm_setup_opt_arm64 [ featur2 kvm_setup_opt_feature ] +# syz_kvm_setup_cpu$arm64 takes the same feature bitmap as ioctl$KVM_ARM_VCPU_INIT. kvm_setup_opt_feature { typ const[1, int64] - val flags[kvm_vcpu_features_arm64, int64] + val flags[kvm_vcpu_feature_bits_arm64, int64] } kvm_setup_opt_ppc64 [ @@ -1128,9 +1140,10 @@ kvm_coalesced_mmio_zone { pio_or_pad int32[0:1] } +# `feature` is a set of feature bits: https://docs.kernel.org/virt/kvm/api.html#kvm-arm-vcpu-init kvm_vcpu_init { target flags[kvm_vcpu_target, int32] - feature flags[kvm_vcpu_features_arm64, int32] + feature flags[kvm_vcpu_feature_bits_arm64, int32] pad array[const[0, int32], 6] } diff --git a/sys/linux/dev_kvm.txt.const b/sys/linux/dev_kvm.txt.const index d5ef89bd0..22749c512 100644 --- a/sys/linux/dev_kvm.txt.const +++ b/sys/linux/dev_kvm.txt.const @@ -26,21 +26,28 @@ KVM_ARM_TARGET_FOUNDATION_V8 = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1 KVM_ARM_TARGET_GENERIC_V8 = 386:amd64:mips64le:ppc64le:s390x:???, arm64:5 KVM_ARM_TARGET_XGENE_POTENZA = 386:amd64:mips64le:ppc64le:s390x:???, arm64:3 KVM_ARM_VCPU_EL1_32BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1 +KVM_ARM_VCPU_EL1_32BIT_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:2 KVM_ARM_VCPU_FINALIZE = 1074048706, mips64le:ppc64le:2147790530 KVM_ARM_VCPU_INIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1075883694 KVM_ARM_VCPU_PMU_V3 = 386:amd64:mips64le:ppc64le:s390x:???, arm64:3 +KVM_ARM_VCPU_PMU_V3_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:8 KVM_ARM_VCPU_PMU_V3_CTRL = 386:amd64:mips64le:ppc64le:s390x:???, arm64:0 KVM_ARM_VCPU_PMU_V3_FILTER = 386:amd64:mips64le:ppc64le:s390x:???, arm64:2 KVM_ARM_VCPU_PMU_V3_INIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1 KVM_ARM_VCPU_PMU_V3_IRQ = 386:amd64:mips64le:ppc64le:s390x:???, arm64:0 KVM_ARM_VCPU_PMU_V3_SET_PMU = 386:amd64:mips64le:ppc64le:s390x:???, arm64:3 KVM_ARM_VCPU_POWER_OFF = 386:amd64:mips64le:ppc64le:s390x:???, arm64:0 +KVM_ARM_VCPU_POWER_OFF_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1 KVM_ARM_VCPU_PSCI_0_2 = 386:amd64:mips64le:ppc64le:s390x:???, arm64:2 +KVM_ARM_VCPU_PSCI_0_2_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:4 KVM_ARM_VCPU_PTRAUTH_ADDRESS = 386:amd64:mips64le:ppc64le:s390x:???, arm64:5 +KVM_ARM_VCPU_PTRAUTH_ADDRESS_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:32 KVM_ARM_VCPU_PTRAUTH_GENERIC = 386:amd64:mips64le:ppc64le:s390x:???, arm64:6 +KVM_ARM_VCPU_PTRAUTH_GENERIC_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:64 KVM_ARM_VCPU_PVTIME_CTRL = 386:amd64:mips64le:ppc64le:s390x:???, arm64:2 KVM_ARM_VCPU_PVTIME_IPA = 386:amd64:mips64le:ppc64le:s390x:???, arm64:0 KVM_ARM_VCPU_SVE = 386:amd64:mips64le:ppc64le:s390x:???, arm64:4 +KVM_ARM_VCPU_SVE_BIT = 386:amd64:mips64le:ppc64le:s390x:???, arm64:16 KVM_ARM_VCPU_TIMER_CTRL = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1 KVM_ARM_VCPU_TIMER_IRQ_PTIMER = 386:amd64:mips64le:ppc64le:s390x:???, arm64:1 KVM_ARM_VCPU_TIMER_IRQ_VTIMER = 386:amd64:mips64le:ppc64le:s390x:???, arm64:0 -- cgit mrf-deployment