[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/20] target-i386: Move kvm_check_features_against_
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PATCH 16/20] target-i386: Move kvm_check_features_against_host() check to realize time |
Date: |
Tue, 15 Jan 2013 10:27:34 +0100 |
From: Igor Mammedov <address@hidden>
kvm_check_features_against_host() should be called when features can't
be changed, and when features are converted to properties it would be
possible to change them until realize time, so correct way is to call
kvm_check_features_against_host() in x86_cpu_realize().
Signed-off-by: Igor Mammedov <address@hidden>
Reviewed-by: Eduardo Habkost <address@hidden>
Signed-off-by: Andreas Färber <address@hidden>
---
target-i386/cpu.c | 28 +++++++++++++++-------------
1 Datei geändert, 15 Zeilen hinzugefügt(+), 13 Zeilen entfernt(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 3a68470..333745b 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1022,27 +1022,28 @@ static int unavailable_host_feature(FeatureWordInfo *f,
uint32_t mask)
*
* This function may be called only if KVM is enabled.
*/
-static int kvm_check_features_against_host(x86_def_t *guest_def)
+static int kvm_check_features_against_host(X86CPU *cpu)
{
+ CPUX86State *env = &cpu->env;
x86_def_t host_def;
uint32_t mask;
int rv, i;
struct model_features_t ft[] = {
- {&guest_def->features, &host_def.features,
+ {&env->cpuid_features, &host_def.features,
FEAT_1_EDX },
- {&guest_def->ext_features, &host_def.ext_features,
+ {&env->cpuid_ext_features, &host_def.ext_features,
FEAT_1_ECX },
- {&guest_def->ext2_features, &host_def.ext2_features,
+ {&env->cpuid_ext2_features, &host_def.ext2_features,
FEAT_8000_0001_EDX },
- {&guest_def->ext3_features, &host_def.ext3_features,
+ {&env->cpuid_ext3_features, &host_def.ext3_features,
FEAT_8000_0001_ECX },
- {&guest_def->ext4_features, &host_def.ext4_features,
+ {&env->cpuid_ext4_features, &host_def.ext4_features,
FEAT_C000_0001_EDX },
- {&guest_def->cpuid_7_0_ebx_features, &host_def.cpuid_7_0_ebx_features,
+ {&env->cpuid_7_0_ebx_features, &host_def.cpuid_7_0_ebx_features,
FEAT_7_0_EBX },
- {&guest_def->svm_features, &host_def.svm_features,
+ {&env->cpuid_svm_features, &host_def.svm_features,
FEAT_SVM },
- {&guest_def->kvm_features, &host_def.kvm_features,
+ {&env->cpuid_kvm_features, &host_def.kvm_features,
FEAT_KVM },
};
@@ -1471,10 +1472,6 @@ static int cpu_x86_parse_featurestr(x86_def_t
*x86_cpu_def, char *features)
x86_cpu_def->kvm_features &= ~minus_features[FEAT_KVM];
x86_cpu_def->svm_features &= ~minus_features[FEAT_SVM];
x86_cpu_def->cpuid_7_0_ebx_features &= ~minus_features[FEAT_7_0_EBX];
- if (check_cpuid && kvm_enabled()) {
- if (kvm_check_features_against_host(x86_cpu_def) && enforce_cpuid)
- goto error;
- }
return 0;
error:
@@ -2177,6 +2174,11 @@ void x86_cpu_realize(Object *obj, Error **errp)
#ifdef CONFIG_KVM
filter_features_for_kvm(cpu);
#endif
+ if (check_cpuid && kvm_check_features_against_host(cpu)
+ && enforce_cpuid) {
+ error_setg(errp, "Host's CPU doesn't support requested features");
+ return;
+ }
}
#ifndef CONFIG_USER_ONLY
--
1.7.10.4
- [Qemu-devel] [PATCH 08/20] kvm: Add fake KVM constants to avoid #ifdefs on KVM-specific code, (continued)
- [Qemu-devel] [PATCH 08/20] kvm: Add fake KVM constants to avoid #ifdefs on KVM-specific code, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 11/20] target-i386: kvm_check_features_against_host(): Use feature_word_info, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 13/20] target-i386: check/enforce: Check all feature words, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 09/20] target-i386: Disable kvm_mmu by default, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 04/20] cpu: Move cpu_index field to CPUState, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 10/20] target-i386/cpu: Introduce FeatureWord typedefs, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 12/20] target-i386/cpu.c: Add feature name array for ext4_features, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 14/20] target-i386: Move setting defaults out of cpu_x86_parse_featurestr(), Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 18/20] target-i386: Introduce hw_{local, global}_breakpoint_enabled(), Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 17/20] target-i386: Define DR7 bit field constants, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 16/20] target-i386: Move kvm_check_features_against_host() check to realize time,
Andreas Färber <=
- [Qemu-devel] [PATCH 15/20] target-i386: cpu_x86_register() consolidate freeing resources, Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 20/20] target-i386: Use switch in check_hw_breakpoints(), Andreas Färber, 2013/01/15
- [Qemu-devel] [PATCH 19/20] target-i386: Avoid goto in hw_breakpoint_insert(), Andreas Färber, 2013/01/15
- Re: [Qemu-devel] [PULL] QOM CPUState patch queue 2013-01-15, Anthony Liguori, 2013/01/15