From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Igor Mammedov" <imammedo@redhat.com>,
"Andreas Färber" <afaerber@suse.de>
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 [thread overview]
Message-ID: <1358242058-1404-17-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1358242058-1404-1-git-send-email-afaerber@suse.de>
From: Igor Mammedov <imammedo@redhat.com>
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 <imammedo@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
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
next prev parent reply other threads:[~2013-01-15 9:28 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-15 9:27 [Qemu-devel] [PULL] QOM CPUState patch queue 2013-01-15 Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 01/20] cpu: Move nr_{cores, threads} fields to CPUState Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 02/20] target-mips: Clean up mips_cpu_map_tc() documentation Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 03/20] cpu: Move numa_node field to CPUState Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 04/20] cpu: Move cpu_index " Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 05/20] kvm: Pass CPUState to kvm_init_vcpu() Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 06/20] xen: Simplify halting of first CPU Andreas Färber
2013-01-15 11:03 ` Stefano Stabellini
2013-01-15 14:46 ` Andreas Färber
2013-01-15 15:44 ` Stefano Stabellini
2013-01-15 9:27 ` [Qemu-devel] [PATCH 07/20] exec: Return CPUState from qemu_get_cpu() Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 08/20] kvm: Add fake KVM constants to avoid #ifdefs on KVM-specific code Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 09/20] target-i386: Disable kvm_mmu by default Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 10/20] target-i386/cpu: Introduce FeatureWord typedefs Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 11/20] target-i386: kvm_check_features_against_host(): Use feature_word_info Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 12/20] target-i386/cpu.c: Add feature name array for ext4_features Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 13/20] target-i386: check/enforce: Check all feature words Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 14/20] target-i386: Move setting defaults out of cpu_x86_parse_featurestr() Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 15/20] target-i386: cpu_x86_register() consolidate freeing resources Andreas Färber
2013-01-15 9:27 ` Andreas Färber [this message]
2013-01-15 9:27 ` [Qemu-devel] [PATCH 17/20] target-i386: Define DR7 bit field constants Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 18/20] target-i386: Introduce hw_{local, global}_breakpoint_enabled() Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 19/20] target-i386: Avoid goto in hw_breakpoint_insert() Andreas Färber
2013-01-15 9:27 ` [Qemu-devel] [PATCH 20/20] target-i386: Use switch in check_hw_breakpoints() Andreas Färber
2013-01-16 1:18 ` [Qemu-devel] [PULL] QOM CPUState patch queue 2013-01-15 Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1358242058-1404-17-git-send-email-afaerber@suse.de \
--to=afaerber@suse.de \
--cc=imammedo@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).