@@ -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
614646kvm_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
616649kvm_cpuid_entry {
617650 func flags[kvm_cpu_function, int32]
0 commit comments