OSDN Git Service

i386: Mask SVM features if nested SVM is disabled
authorEduardo Habkost <ehabkost@redhat.com>
Tue, 23 Jun 2020 23:01:16 +0000 (19:01 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 26 Jun 2020 13:39:40 +0000 (09:39 -0400)
commit730319aef0fcb94f11a4a2d32656437fdde7efdd
tree389d5ba8b684ff387a88bd6f57ac24c94b2e91b5
parentc8d7fd059d73a7d3035e379c319034c30ba3dbbf
i386: Mask SVM features if nested SVM is disabled

QEMU incorrectly validates FEAT_SVM feature flags against
GET_SUPPORTED_CPUID even if SVM features are being masked out by
cpu_x86_cpuid().  This can make QEMU print warnings on most AMD
CPU models, even when SVM nesting is disabled (which is the
default).

This bug was never detected before because of a Linux KVM bug:
until Linux v5.6, KVM was not filtering out SVM features in
GET_SUPPORTED_CPUID when nested was disabled.  This KVM bug was
fixed in Linux v5.7-rc1, on Linux commit a50718cc3f43 ("KVM:
nSVM: Expose SVM features to L1 iff nested is enabled").

Fix the problem by adding a CPUID_EXT3_SVM dependency to all
FEAT_SVM feature flags in the feature_dependencies table.

Reported-by: Yanan Fu <yfu@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Message-Id: <20200623230116.277409-1-ehabkost@redhat.com>
[Fix testcase. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
target/i386/cpu.c
tests/qtest/test-x86-cpuid-compat.c