Skip to content

Commit cee4cb1

Browse files
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
1 parent 98d1f71 commit cee4cb1

File tree

2 files changed

+52
-14
lines changed

2 files changed

+52
-14
lines changed

sys/linux/dev_kvm_amd64.txt

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -590,28 +590,61 @@ kvm_guest_debug_arch_x86 {
590590
reg array[int64, 8]
591591
}
592592

593-
kvm_nested_state {
593+
kvm_vmx_smm {
594+
flags flags[kvm_nested_smm_flags, int16]
595+
}
596+
597+
# Size must be 120 bytes to start data at 128 bytes.
598+
kvm_vmx_nested_state_hdr {
599+
vmxon_pa flags[kvm_guest_addrs, int64]
600+
vmcs12_pa flags[kvm_guest_addrs, int64]
601+
smm kvm_vmx_smm
602+
flags flags[kvm_vmx_nested_state_hdr_flags, int32]
603+
preemption_timer_deadline int64
604+
} [size[120]]
605+
606+
kvm_vmx_nested_state_data {
607+
vmcs12 array[int8, KVM_STATE_NESTED_VMX_VMCS_SIZE]
608+
shadow_vmcs12 array[int8, KVM_STATE_NESTED_VMX_VMCS_SIZE]
609+
}
610+
611+
# format = KVM_STATE_NESTED_FORMAT_VMX
612+
kvm_nested_state_vmx {
594613
flags flags[kvm_nested_state_flags, int16]
595614
format const[0, int16]
596615
size bytesize[parent, int32]
597-
hdr kvm_vmx_nested_state
598-
data void
616+
hdr kvm_vmx_nested_state_hdr
617+
data kvm_vmx_nested_state_data
618+
}
619+
620+
# SVM descriptions taken from https://elixir.bootlin.com/linux/latest/source/arch/x86/include/uapi/asm/kvm.h
621+
# Size must be 120 bytes to start data at 128 bytes.
622+
kvm_svm_nested_state_hdr {
623+
vmcb_pa flags[kvm_guest_addrs, int64]
624+
} [size[120]]
625+
626+
kvm_svm_nested_state_data {
627+
vmcb12 array[int8, KVM_STATE_NESTED_SVM_VMCB_SIZE]
599628
}
600629

601-
kvm_nested_state_arg {
602-
state kvm_nested_state
603-
current_vmcs array[int8, VMCS12_SIZE]
604-
shadow_vmcs array[int8, VMCS12_SIZE]
630+
# format = KVM_STATE_NESTED_FORMAT_SVM
631+
kvm_nested_state_svm {
632+
flags flags[kvm_nested_state_flags, int16]
633+
format const[1, int16]
634+
size bytesize[parent, int32]
635+
hdr kvm_svm_nested_state_hdr
636+
data kvm_svm_nested_state_data
605637
}
606638

607-
kvm_vmx_nested_state {
608-
vmxon_pa flags[kvm_guest_addrs, int64]
609-
vmcs_pa flags[kvm_guest_addrs, int64]
610-
smm_flags flags[kvm_nested_smm_flags, int16]
611-
} [size[120]]
639+
# See https://docs.kernel.org/virt/kvm/api.html#kvm-get-nested-state.
640+
kvm_nested_state_arg [
641+
vmx kvm_nested_state_vmx
642+
svm kvm_nested_state_svm
643+
] [varlen]
612644

613-
kvm_nested_state_flags = KVM_STATE_NESTED_GUEST_MODE, KVM_STATE_NESTED_RUN_PENDING
645+
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
614646
kvm_nested_smm_flags = KVM_STATE_NESTED_SMM_GUEST_MODE, KVM_STATE_NESTED_SMM_VMXON
647+
kvm_vmx_nested_state_hdr_flags = KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE
615648

616649
kvm_cpuid_entry {
617650
func flags[kvm_cpu_function, int32]

sys/linux/dev_kvm_amd64.txt.const

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,16 @@ KVM_SEV_SNP_PAGE_TYPE_UNMEASURED = 4
154154
KVM_SEV_SNP_PAGE_TYPE_ZERO = 3
155155
KVM_SMI = 44727
156156
KVM_SREGS2_FLAGS_PDPTRS_VALID = 1
157+
KVM_STATE_NESTED_EVMCS = 4
158+
KVM_STATE_NESTED_GIF_SET = 256
157159
KVM_STATE_NESTED_GUEST_MODE = 1
160+
KVM_STATE_NESTED_MTF_PENDING = 8
158161
KVM_STATE_NESTED_RUN_PENDING = 2
159162
KVM_STATE_NESTED_SMM_GUEST_MODE = 1
160163
KVM_STATE_NESTED_SMM_VMXON = 2
164+
KVM_STATE_NESTED_SVM_VMCB_SIZE = 4096
165+
KVM_STATE_NESTED_VMX_VMCS_SIZE = 4096
166+
KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE = 1
161167
KVM_TPR_ACCESS_REPORTING = 3223891602
162168
KVM_TRANSLATE = 3222843013
163169
KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK = 2
@@ -203,6 +209,5 @@ MCI_STATUS_PCC = 144115188075855872
203209
MCI_STATUS_S = 72057594037927936
204210
MCI_STATUS_UC = 2305843009213693952
205211
MCI_STATUS_VAL = 9223372036854775808
206-
VMCS12_SIZE = ???
207212
__NR_ioctl = 386:54, amd64:16
208213
__NR_openat = 386:295, amd64:257

0 commit comments

Comments
 (0)