diff options
author | David Edmondson <david.edmondson@oracle.com> | 2021-07-05 11:46:31 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2021-07-06 08:33:48 +0200 |
commit | fea4500841024195ec701713e05b92ebf667f192 (patch) | |
tree | 7901cb3679ee3b1177ff80493f874bade24d63ea /target/i386/kvm/kvm.c | |
parent | 3568987f78faff90829ea6c885bbdd5b083dc86c (diff) | |
download | qemu-fea4500841024195ec701713e05b92ebf667f192.zip qemu-fea4500841024195ec701713e05b92ebf667f192.tar.gz qemu-fea4500841024195ec701713e05b92ebf667f192.tar.bz2 |
target/i386: Populate x86_ext_save_areas offsets using cpuid where possible
Rather than relying on the X86XSaveArea structure definition,
determine the offset of XSAVE state areas using CPUID leaf 0xd where
possible (KVM and HVF).
Signed-off-by: David Edmondson <david.edmondson@oracle.com>
Message-Id: <20210705104632.2902400-8-david.edmondson@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'target/i386/kvm/kvm.c')
-rw-r--r-- | target/i386/kvm/kvm.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 41b0764..a850354 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -1891,6 +1891,13 @@ int kvm_arch_init_vcpu(CPUState *cs) env->xsave_buf_len = sizeof(struct kvm_xsave); env->xsave_buf = qemu_memalign(4096, env->xsave_buf_len); memset(env->xsave_buf, 0, env->xsave_buf_len); + + /* + * The allocated storage must be large enough for all of the + * possible XSAVE state components. + */ + assert(kvm_arch_get_supported_cpuid(kvm_state, 0xd, 0, R_ECX) + <= env->xsave_buf_len); } max_nested_state_len = kvm_max_nested_state_length(); |