From: Maran Wilson <maran.wilson@oracle.com> To: Liran Alon <liran.alon@oracle.com>, qemu-devel@nongnu.org Cc: ehabkost@redhat.com, kvm@vger.kernel.org, mtosatti@redhat.com, dgilbert@redhat.com, pbonzini@redhat.com, rth@twiddle.net, jmattson@google.com Subject: Re: [Qemu-devel] [QEMU PATCH v3 5/9] linux-headers: i386: Modify struct kvm_nested_state to have explicit fields for data Date: Tue, 18 Jun 2019 15:16:15 -0700 [thread overview] Message-ID: <fad1387b-54fd-cbfc-89c8-433d9e8da141@oracle.com> (raw) In-Reply-To: <20190617175658.135869-6-liran.alon@oracle.com> On 6/17/2019 10:56 AM, Liran Alon wrote: > Improve the KVM_{GET,SET}_NESTED_STATE structs by detailing the format > of VMX nested state data in a struct. > > In order to avoid changing the ioctl values of > KVM_{GET,SET}_NESTED_STATE, there is a need to preserve > sizeof(struct kvm_nested_state). This is done by defining the data > struct as "data.vmx[0]". It was the most elegant way I found to > preserve struct size while still keeping struct readable and easy to > maintain. It does have a misfortunate side-effect that now it has to be > accessed as "data.vmx[0]" rather than just "data.vmx". > > Because we are already modifying these structs, I also modified the > following: > * Define the "format" field values as macros. > * Rename vmcs_pa to vmcs12_pa for better readability. > * Add stub structs for AMD SVM. > > Signed-off-by: Liran Alon <liran.alon@oracle.com> > --- > linux-headers/asm-x86/kvm.h | 41 +++++++++++++++++++++++++++---------- > 1 file changed, 30 insertions(+), 11 deletions(-) > > diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h > index 7a0e64ccd6ff..e655d108af19 100644 > --- a/linux-headers/asm-x86/kvm.h > +++ b/linux-headers/asm-x86/kvm.h > @@ -383,6 +383,9 @@ struct kvm_sync_regs { > #define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) > #define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3) > > +#define KVM_STATE_NESTED_FORMAT_VMX 0 > +#define KVM_STATE_NESTED_FORMAT_SVM 1 > + > #define KVM_STATE_NESTED_GUEST_MODE 0x00000001 > #define KVM_STATE_NESTED_RUN_PENDING 0x00000002 > #define KVM_STATE_NESTED_EVMCS 0x00000004 > @@ -390,35 +393,51 @@ struct kvm_sync_regs { > #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001 > #define KVM_STATE_NESTED_SMM_VMXON 0x00000002 > > -struct kvm_vmx_nested_state { > +struct kvm_vmx_nested_state_data { > + __u8 vmcs12[0x1000]; > + __u8 shadow_vmcs12[0x1000]; I assume you will replace this magic 0x1000 value too, as discussed with respect to patch 7? Thanks, -Maran > +}; > + > +struct kvm_vmx_nested_state_hdr { > __u64 vmxon_pa; > - __u64 vmcs_pa; > + __u64 vmcs12_pa; > > struct { > __u16 flags; > } smm; > }; > > +struct kvm_svm_nested_state_data { > + /* TODO: Implement */ > +}; > + > +struct kvm_svm_nested_state_hdr { > + /* TODO: Implement */ > +}; > + > /* for KVM_CAP_NESTED_STATE */ > struct kvm_nested_state { > - /* KVM_STATE_* flags */ > __u16 flags; > - > - /* 0 for VMX, 1 for SVM. */ > __u16 format; > - > - /* 128 for SVM, 128 + VMCS size for VMX. */ > __u32 size; > > union { > - /* VMXON, VMCS */ > - struct kvm_vmx_nested_state vmx; > + struct kvm_vmx_nested_state_hdr vmx; > + struct kvm_svm_nested_state_hdr svm; > > /* Pad the header to 128 bytes. */ > __u8 pad[120]; > - }; > + } hdr; > > - __u8 data[0]; > + /* > + * Define data region as 0 bytes to preserve backwards-compatability > + * to old definition of kvm_nested_state in order to avoid changing > + * KVM_{GET,PUT}_NESTED_STATE ioctl values. > + */ > + union { > + struct kvm_vmx_nested_state_data vmx[0]; > + struct kvm_svm_nested_state_data svm[0]; > + } data; > }; > > #endif /* _ASM_X86_KVM_H */
WARNING: multiple messages have this Message-ID (diff)
From: Maran Wilson <maran.wilson@oracle.com> To: Liran Alon <liran.alon@oracle.com>, qemu-devel@nongnu.org Cc: ehabkost@redhat.com, kvm@vger.kernel.org, mtosatti@redhat.com, dgilbert@redhat.com, pbonzini@redhat.com, jmattson@google.com, rth@twiddle.net Subject: Re: [Qemu-devel] [QEMU PATCH v3 5/9] linux-headers: i386: Modify struct kvm_nested_state to have explicit fields for data Date: Tue, 18 Jun 2019 15:16:15 -0700 [thread overview] Message-ID: <fad1387b-54fd-cbfc-89c8-433d9e8da141@oracle.com> (raw) In-Reply-To: <20190617175658.135869-6-liran.alon@oracle.com> On 6/17/2019 10:56 AM, Liran Alon wrote: > Improve the KVM_{GET,SET}_NESTED_STATE structs by detailing the format > of VMX nested state data in a struct. > > In order to avoid changing the ioctl values of > KVM_{GET,SET}_NESTED_STATE, there is a need to preserve > sizeof(struct kvm_nested_state). This is done by defining the data > struct as "data.vmx[0]". It was the most elegant way I found to > preserve struct size while still keeping struct readable and easy to > maintain. It does have a misfortunate side-effect that now it has to be > accessed as "data.vmx[0]" rather than just "data.vmx". > > Because we are already modifying these structs, I also modified the > following: > * Define the "format" field values as macros. > * Rename vmcs_pa to vmcs12_pa for better readability. > * Add stub structs for AMD SVM. > > Signed-off-by: Liran Alon <liran.alon@oracle.com> > --- > linux-headers/asm-x86/kvm.h | 41 +++++++++++++++++++++++++++---------- > 1 file changed, 30 insertions(+), 11 deletions(-) > > diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h > index 7a0e64ccd6ff..e655d108af19 100644 > --- a/linux-headers/asm-x86/kvm.h > +++ b/linux-headers/asm-x86/kvm.h > @@ -383,6 +383,9 @@ struct kvm_sync_regs { > #define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) > #define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3) > > +#define KVM_STATE_NESTED_FORMAT_VMX 0 > +#define KVM_STATE_NESTED_FORMAT_SVM 1 > + > #define KVM_STATE_NESTED_GUEST_MODE 0x00000001 > #define KVM_STATE_NESTED_RUN_PENDING 0x00000002 > #define KVM_STATE_NESTED_EVMCS 0x00000004 > @@ -390,35 +393,51 @@ struct kvm_sync_regs { > #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001 > #define KVM_STATE_NESTED_SMM_VMXON 0x00000002 > > -struct kvm_vmx_nested_state { > +struct kvm_vmx_nested_state_data { > + __u8 vmcs12[0x1000]; > + __u8 shadow_vmcs12[0x1000]; I assume you will replace this magic 0x1000 value too, as discussed with respect to patch 7? Thanks, -Maran > +}; > + > +struct kvm_vmx_nested_state_hdr { > __u64 vmxon_pa; > - __u64 vmcs_pa; > + __u64 vmcs12_pa; > > struct { > __u16 flags; > } smm; > }; > > +struct kvm_svm_nested_state_data { > + /* TODO: Implement */ > +}; > + > +struct kvm_svm_nested_state_hdr { > + /* TODO: Implement */ > +}; > + > /* for KVM_CAP_NESTED_STATE */ > struct kvm_nested_state { > - /* KVM_STATE_* flags */ > __u16 flags; > - > - /* 0 for VMX, 1 for SVM. */ > __u16 format; > - > - /* 128 for SVM, 128 + VMCS size for VMX. */ > __u32 size; > > union { > - /* VMXON, VMCS */ > - struct kvm_vmx_nested_state vmx; > + struct kvm_vmx_nested_state_hdr vmx; > + struct kvm_svm_nested_state_hdr svm; > > /* Pad the header to 128 bytes. */ > __u8 pad[120]; > - }; > + } hdr; > > - __u8 data[0]; > + /* > + * Define data region as 0 bytes to preserve backwards-compatability > + * to old definition of kvm_nested_state in order to avoid changing > + * KVM_{GET,PUT}_NESTED_STATE ioctl values. > + */ > + union { > + struct kvm_vmx_nested_state_data vmx[0]; > + struct kvm_svm_nested_state_data svm[0]; > + } data; > }; > > #endif /* _ASM_X86_KVM_H */
next prev parent reply other threads:[~2019-06-18 22:17 UTC|newest] Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-17 17:56 [QEMU PATCH v3 0/9]: KVM: i386: Add support for save and restore of nested state Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-17 17:56 ` [QEMU PATCH v3 1/9] KVM: Introduce kvm_arch_destroy_vcpu() Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 22:15 ` Maran Wilson 2019-06-18 22:15 ` Maran Wilson 2019-06-17 17:56 ` [QEMU PATCH v3 2/9] KVM: i386: Use symbolic constant for #DB/#BP exception constants Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-17 17:56 ` [QEMU PATCH v3 3/9] KVM: i386: Re-inject #DB to guest with updated DR6 Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-17 17:56 ` [QEMU PATCH v3 4/9] KVM: i386: Block migration for vCPUs exposed with nested virtualization Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 8:44 ` Dr. David Alan Gilbert 2019-06-18 8:44 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-06-18 22:16 ` Maran Wilson 2019-06-18 22:16 ` Maran Wilson 2019-06-17 17:56 ` [QEMU PATCH v3 5/9] linux-headers: i386: Modify struct kvm_nested_state to have explicit fields for data Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 22:16 ` Maran Wilson [this message] 2019-06-18 22:16 ` Maran Wilson 2019-06-17 17:56 ` [QEMU PATCH v3 6/9] vmstate: Add support for kernel integer types Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 8:55 ` Dr. David Alan Gilbert 2019-06-18 8:55 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-06-18 15:36 ` Liran Alon 2019-06-18 15:36 ` [Qemu-devel] " Liran Alon 2019-06-18 15:42 ` Dr. David Alan Gilbert 2019-06-18 15:42 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-06-18 16:44 ` Paolo Bonzini 2019-06-18 16:44 ` [Qemu-devel] " Paolo Bonzini 2019-06-17 17:56 ` [QEMU PATCH v3 7/9] KVM: i386: Add support for save and restore nested state Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 9:03 ` Dr. David Alan Gilbert 2019-06-18 9:03 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-06-18 15:40 ` Liran Alon 2019-06-18 15:40 ` [Qemu-devel] " Liran Alon 2019-06-18 15:48 ` Dr. David Alan Gilbert 2019-06-18 15:48 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-06-18 15:50 ` Liran Alon 2019-06-18 15:50 ` [Qemu-devel] " Liran Alon 2019-06-18 16:16 ` Paolo Bonzini 2019-06-18 16:16 ` [Qemu-devel] " Paolo Bonzini 2019-06-18 22:16 ` Maran Wilson 2019-06-18 22:16 ` Maran Wilson 2019-06-17 17:56 ` [QEMU PATCH v3 8/9] KVM: i386: Add support for KVM_CAP_EXCEPTION_PAYLOAD Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 9:07 ` Dr. David Alan Gilbert 2019-06-18 9:07 ` [Qemu-devel] " Dr. David Alan Gilbert 2019-06-18 15:45 ` Liran Alon 2019-06-18 15:45 ` [Qemu-devel] " Liran Alon 2019-06-17 17:56 ` [QEMU PATCH v3 9/9] KVM: i386: Remove VMX migration blocker Liran Alon 2019-06-17 17:56 ` [Qemu-devel] " Liran Alon 2019-06-18 22:17 ` Maran Wilson 2019-06-18 22:17 ` Maran Wilson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=fad1387b-54fd-cbfc-89c8-433d9e8da141@oracle.com \ --to=maran.wilson@oracle.com \ --cc=dgilbert@redhat.com \ --cc=ehabkost@redhat.com \ --cc=jmattson@google.com \ --cc=kvm@vger.kernel.org \ --cc=liran.alon@oracle.com \ --cc=mtosatti@redhat.com \ --cc=pbonzini@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=rth@twiddle.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.