mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
kvm: x86: mask out XSAVES
This feature is not supported inside KVM guests yet, because we do not emulate MSR_IA32_XSS. Mask it out. Cc: stable@vger.kernel.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c274e03af7
commit
b65d6e17fe
@ -320,6 +320,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
|
||||
F(ADX) | F(SMAP) | F(AVX512F) | F(AVX512PF) | F(AVX512ER) |
|
||||
F(AVX512CD);
|
||||
|
||||
/* cpuid 0xD.1.eax */
|
||||
const u32 kvm_supported_word10_x86_features =
|
||||
F(XSAVEOPT) | F(XSAVEC) | F(XGETBV1);
|
||||
|
||||
/* all calls to cpuid_count() should be made on the same cpu */
|
||||
get_cpu();
|
||||
|
||||
@ -456,13 +460,18 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
|
||||
entry->eax &= supported;
|
||||
entry->edx &= supported >> 32;
|
||||
entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
|
||||
if (!supported)
|
||||
break;
|
||||
|
||||
for (idx = 1, i = 1; idx < 64; ++idx) {
|
||||
u64 mask = ((u64)1 << idx);
|
||||
if (*nent >= maxnent)
|
||||
goto out;
|
||||
|
||||
do_cpuid_1_ent(&entry[i], function, idx);
|
||||
if (entry[i].eax == 0 || !(supported & mask))
|
||||
if (idx == 1)
|
||||
entry[i].eax &= kvm_supported_word10_x86_features;
|
||||
else if (entry[i].eax == 0 || !(supported & mask))
|
||||
continue;
|
||||
entry[i].flags |=
|
||||
KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
|
||||
|
Loading…
Reference in New Issue
Block a user