aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEduardo Habkost <ehabkost@redhat.com>2013-01-07 16:20:48 -0200
committerAndreas Färber <afaerber@suse.de>2013-01-15 04:09:14 +0100
commit07ca59450c9a0c5df65665ce46aa8487af59a1dd (patch)
tree022696d88807932ed17cae5b87014055ad2b62bc
parent89e49c8bea9ec81d2cca25f81f5e15c3a1d8b69c (diff)
downloadqemu-07ca59450c9a0c5df65665ce46aa8487af59a1dd.zip
qemu-07ca59450c9a0c5df65665ce46aa8487af59a1dd.tar.gz
qemu-07ca59450c9a0c5df65665ce46aa8487af59a1dd.tar.bz2
target-i386: check/enforce: Check all feature words
This adds the following feature words to the list of flags to be checked by kvm_check_features_against_host(): - cpuid_7_0_ebx_features - ext4_features - kvm_features - svm_features This will ensure the "enforce" flag works as it should: it won't allow QEMU to be started unless every flag that was requested by the user or defined in the CPU model is supported by the host. This patch may cause existing configurations where "enforce" wasn't preventing QEMU from being started to abort QEMU. But that's exactly the point of this patch: if a flag was not supported by the host and QEMU wasn't aborting, it was a bug in the "enforce" code. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
-rw-r--r--target-i386/cpu.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 8ec9929..9a48e3f 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1016,8 +1016,9 @@ static int unavailable_host_feature(FeatureWordInfo *f, uint32_t mask)
return 0;
}
-/* best effort attempt to inform user requested cpu flags aren't making
- * their way to the guest.
+/* Check if all requested cpu flags are making their way to the guest
+ *
+ * Returns 0 if all flags are supported by the host, non-zero otherwise.
*
* This function may be called only if KVM is enabled.
*/
@@ -1035,6 +1036,14 @@ static int kvm_check_features_against_host(x86_def_t *guest_def)
FEAT_8000_0001_EDX },
{&guest_def->ext3_features, &host_def.ext3_features,
FEAT_8000_0001_ECX },
+ {&guest_def->ext4_features, &host_def.ext4_features,
+ FEAT_C000_0001_EDX },
+ {&guest_def->cpuid_7_0_ebx_features, &host_def.cpuid_7_0_ebx_features,
+ FEAT_7_0_EBX },
+ {&guest_def->svm_features, &host_def.svm_features,
+ FEAT_SVM },
+ {&guest_def->kvm_features, &host_def.kvm_features,
+ FEAT_KVM },
};
assert(kvm_enabled());