mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-26 19:42:33 -06:00
target-i386: Move xcc->kvm_required check to realize time
It will allow to drop custom cpu_x86_init() and use cpu_generic_init() instead, reducing cpu_x86_create() to a simple 3-liner. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
e435601058
commit
104494ea25
1 changed files with 16 additions and 8 deletions
|
@ -678,6 +678,14 @@ static ObjectClass *x86_cpu_class_by_name(const char *cpu_model)
|
||||||
return oc;
|
return oc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *x86_cpu_class_get_model_name(X86CPUClass *cc)
|
||||||
|
{
|
||||||
|
const char *class_name = object_class_get_name(OBJECT_CLASS(cc));
|
||||||
|
assert(g_str_has_suffix(class_name, X86_CPU_TYPE_SUFFIX));
|
||||||
|
return g_strndup(class_name,
|
||||||
|
strlen(class_name) - strlen(X86_CPU_TYPE_SUFFIX));
|
||||||
|
}
|
||||||
|
|
||||||
struct X86CPUDefinition {
|
struct X86CPUDefinition {
|
||||||
const char *name;
|
const char *name;
|
||||||
uint32_t level;
|
uint32_t level;
|
||||||
|
@ -1552,7 +1560,7 @@ static void host_x86_cpu_initfn(Object *obj)
|
||||||
*/
|
*/
|
||||||
cpu->host_features = true;
|
cpu->host_features = true;
|
||||||
|
|
||||||
/* If KVM is disabled, cpu_x86_create() will already report an error */
|
/* If KVM is disabled, x86_cpu_realizefn() will report an error later */
|
||||||
if (kvm_enabled()) {
|
if (kvm_enabled()) {
|
||||||
env->cpuid_level = kvm_arch_get_supported_cpuid(s, 0x0, 0, R_EAX);
|
env->cpuid_level = kvm_arch_get_supported_cpuid(s, 0x0, 0, R_EAX);
|
||||||
env->cpuid_xlevel = kvm_arch_get_supported_cpuid(s, 0x80000000, 0, R_EAX);
|
env->cpuid_xlevel = kvm_arch_get_supported_cpuid(s, 0x80000000, 0, R_EAX);
|
||||||
|
@ -2178,7 +2186,6 @@ static void x86_cpu_load_def(X86CPU *cpu, X86CPUDefinition *def, Error **errp)
|
||||||
X86CPU *cpu_x86_create(const char *cpu_model, Error **errp)
|
X86CPU *cpu_x86_create(const char *cpu_model, Error **errp)
|
||||||
{
|
{
|
||||||
X86CPU *cpu = NULL;
|
X86CPU *cpu = NULL;
|
||||||
X86CPUClass *xcc;
|
|
||||||
ObjectClass *oc;
|
ObjectClass *oc;
|
||||||
gchar **model_pieces;
|
gchar **model_pieces;
|
||||||
char *name, *features;
|
char *name, *features;
|
||||||
|
@ -2197,12 +2204,6 @@ X86CPU *cpu_x86_create(const char *cpu_model, Error **errp)
|
||||||
error_setg(&error, "Unable to find CPU definition: %s", name);
|
error_setg(&error, "Unable to find CPU definition: %s", name);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
xcc = X86_CPU_CLASS(oc);
|
|
||||||
|
|
||||||
if (xcc->kvm_required && !kvm_enabled()) {
|
|
||||||
error_setg(&error, "CPU model '%s' requires KVM", name);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu = X86_CPU(object_new(object_class_get_name(oc)));
|
cpu = X86_CPU(object_new(object_class_get_name(oc)));
|
||||||
|
|
||||||
|
@ -2909,6 +2910,13 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||||
static bool ht_warned;
|
static bool ht_warned;
|
||||||
FeatureWord w;
|
FeatureWord w;
|
||||||
|
|
||||||
|
if (xcc->kvm_required && !kvm_enabled()) {
|
||||||
|
char *name = x86_cpu_class_get_model_name(xcc);
|
||||||
|
error_setg(&local_err, "CPU model '%s' requires KVM", name);
|
||||||
|
g_free(name);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (cpu->apic_id < 0) {
|
if (cpu->apic_id < 0) {
|
||||||
error_setg(errp, "apic-id property was not initialized properly");
|
error_setg(errp, "apic-id property was not initialized properly");
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue