diff options
Diffstat (limited to 'target-i386')
-rw-r--r-- | target-i386/cpu.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 1e8127b422..5b3ad78758 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -2845,9 +2845,8 @@ static void mce_init(X86CPU *cpu) } #ifndef CONFIG_USER_ONLY -static void x86_cpu_apic_create(X86CPU *cpu, Error **errp) +APICCommonClass *apic_get_class(void) { - APICCommonState *apic; const char *apic_type = "apic"; if (kvm_apic_in_kernel()) { @@ -2856,7 +2855,15 @@ static void x86_cpu_apic_create(X86CPU *cpu, Error **errp) apic_type = "xen-apic"; } - cpu->apic_state = DEVICE(object_new(apic_type)); + return APIC_COMMON_CLASS(object_class_by_name(apic_type)); +} + +static void x86_cpu_apic_create(X86CPU *cpu, Error **errp) +{ + APICCommonState *apic; + ObjectClass *apic_class = OBJECT_CLASS(apic_get_class()); + + cpu->apic_state = DEVICE(object_new(object_class_get_name(apic_class))); object_property_add_child(OBJECT(cpu), "lapic", OBJECT(cpu->apic_state), &error_abort); |