diff options
| author | Alexander Potapenko <glider@google.com> | 2025-12-03 08:39:49 +0100 |
|---|---|---|
| committer | Alexander Potapenko <glider@google.com> | 2025-12-03 09:40:22 +0000 |
| commit | cee4cb105fe040b0677ce7fa323e6b3458fd0779 (patch) | |
| tree | d6c6c44f6137be709a2281211489f301dc16365b /sys | |
| parent | 98d1f71f7b423008097c585b58c557f9830f5dbf (diff) | |
sys/linux: improve KVM_GET_NESTED_STATE/KVM_SET_NESTED_STATE
Rewrite arch-specific definitions for the nested state to match
the source and the documentation:
- https://elixir.bootlin.com/linux/latest/source/arch/x86/include/uapi/asm/kvm.h
- https://docs.kernel.org/virt/kvm/api.html#kvm-get-nested-state
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/linux/dev_kvm_amd64.txt | 59 | ||||
| -rw-r--r-- | sys/linux/dev_kvm_amd64.txt.const | 7 |
2 files changed, 52 insertions, 14 deletions
diff --git a/sys/linux/dev_kvm_amd64.txt b/sys/linux/dev_kvm_amd64.txt index 19a5c841c..ac74abd99 100644 --- a/sys/linux/dev_kvm_amd64.txt +++ b/sys/linux/dev_kvm_amd64.txt @@ -590,28 +590,61 @@ kvm_guest_debug_arch_x86 { reg array[int64, 8] } -kvm_nested_state { +kvm_vmx_smm { + flags flags[kvm_nested_smm_flags, int16] +} + +# Size must be 120 bytes to start data at 128 bytes. +kvm_vmx_nested_state_hdr { + vmxon_pa flags[kvm_guest_addrs, int64] + vmcs12_pa flags[kvm_guest_addrs, int64] + smm kvm_vmx_smm + flags flags[kvm_vmx_nested_state_hdr_flags, int32] + preemption_timer_deadline int64 +} [size[120]] + +kvm_vmx_nested_state_data { + vmcs12 array[int8, KVM_STATE_NESTED_VMX_VMCS_SIZE] + shadow_vmcs12 array[int8, KVM_STATE_NESTED_VMX_VMCS_SIZE] +} + +# format = KVM_STATE_NESTED_FORMAT_VMX +kvm_nested_state_vmx { flags flags[kvm_nested_state_flags, int16] format const[0, int16] size bytesize[parent, int32] - hdr kvm_vmx_nested_state - data void + hdr kvm_vmx_nested_state_hdr + data kvm_vmx_nested_state_data +} + +# SVM descriptions taken from https://elixir.bootlin.com/linux/latest/source/arch/x86/include/uapi/asm/kvm.h +# Size must be 120 bytes to start data at 128 bytes. +kvm_svm_nested_state_hdr { + vmcb_pa flags[kvm_guest_addrs, int64] +} [size[120]] + +kvm_svm_nested_state_data { + vmcb12 array[int8, KVM_STATE_NESTED_SVM_VMCB_SIZE] } -kvm_nested_state_arg { - state kvm_nested_state - current_vmcs array[int8, VMCS12_SIZE] - shadow_vmcs array[int8, VMCS12_SIZE] +# format = KVM_STATE_NESTED_FORMAT_SVM +kvm_nested_state_svm { + flags flags[kvm_nested_state_flags, int16] + format const[1, int16] + size bytesize[parent, int32] + hdr kvm_svm_nested_state_hdr + data kvm_svm_nested_state_data } -kvm_vmx_nested_state { - vmxon_pa flags[kvm_guest_addrs, int64] - vmcs_pa flags[kvm_guest_addrs, int64] - smm_flags flags[kvm_nested_smm_flags, int16] -} [size[120]] +# See https://docs.kernel.org/virt/kvm/api.html#kvm-get-nested-state. +kvm_nested_state_arg [ + vmx kvm_nested_state_vmx + svm kvm_nested_state_svm +] [varlen] -kvm_nested_state_flags = KVM_STATE_NESTED_GUEST_MODE, KVM_STATE_NESTED_RUN_PENDING +kvm_nested_state_flags = KVM_STATE_NESTED_GUEST_MODE, KVM_STATE_NESTED_RUN_PENDING, KVM_STATE_NESTED_EVMCS, KVM_STATE_NESTED_MTF_PENDING, KVM_STATE_NESTED_GIF_SET kvm_nested_smm_flags = KVM_STATE_NESTED_SMM_GUEST_MODE, KVM_STATE_NESTED_SMM_VMXON +kvm_vmx_nested_state_hdr_flags = KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE kvm_cpuid_entry { func flags[kvm_cpu_function, int32] diff --git a/sys/linux/dev_kvm_amd64.txt.const b/sys/linux/dev_kvm_amd64.txt.const index 6313c4b8a..50e9df80a 100644 --- a/sys/linux/dev_kvm_amd64.txt.const +++ b/sys/linux/dev_kvm_amd64.txt.const @@ -154,10 +154,16 @@ KVM_SEV_SNP_PAGE_TYPE_UNMEASURED = 4 KVM_SEV_SNP_PAGE_TYPE_ZERO = 3 KVM_SMI = 44727 KVM_SREGS2_FLAGS_PDPTRS_VALID = 1 +KVM_STATE_NESTED_EVMCS = 4 +KVM_STATE_NESTED_GIF_SET = 256 KVM_STATE_NESTED_GUEST_MODE = 1 +KVM_STATE_NESTED_MTF_PENDING = 8 KVM_STATE_NESTED_RUN_PENDING = 2 KVM_STATE_NESTED_SMM_GUEST_MODE = 1 KVM_STATE_NESTED_SMM_VMXON = 2 +KVM_STATE_NESTED_SVM_VMCB_SIZE = 4096 +KVM_STATE_NESTED_VMX_VMCS_SIZE = 4096 +KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE = 1 KVM_TPR_ACCESS_REPORTING = 3223891602 KVM_TRANSLATE = 3222843013 KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK = 2 @@ -203,6 +209,5 @@ MCI_STATUS_PCC = 144115188075855872 MCI_STATUS_S = 72057594037927936 MCI_STATUS_UC = 2305843009213693952 MCI_STATUS_VAL = 9223372036854775808 -VMCS12_SIZE = ??? __NR_ioctl = 386:54, amd64:16 __NR_openat = 386:295, amd64:257 |
