aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2025-12-03 08:39:49 +0100
committerAlexander Potapenko <glider@google.com>2025-12-03 09:40:22 +0000
commitcee4cb105fe040b0677ce7fa323e6b3458fd0779 (patch)
treed6c6c44f6137be709a2281211489f301dc16365b /sys
parent98d1f71f7b423008097c585b58c557f9830f5dbf (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.txt59
-rw-r--r--sys/linux/dev_kvm_amd64.txt.const7
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