diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index c0db73e..063f5a6 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1726,14 +1726,14 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp)
     return cpu_list;
 }
 
-int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
+int cpu_x86_register(X86CPU *cpu, const char *cpu_model, uint32_t apic_id)
 {
     x86_def_t def1, *def = &def1;
     Error *error = NULL;
     QDict *features = NULL;
     char *name = NULL;
 
-    cpu->env.cpuid_apic_id = env->cpu_index;
+    cpu->env.cpuid_apic_id = apic_id;
 
     /* for CPU subclasses should go into cpu_x86_init() before object_new() */
     compat_normalize_cpu_model(cpu_model, &name, &features, &error);
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 5edadd1..f37e80b 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -990,7 +990,7 @@ int cpu_x86_signal_handler(int host_signum, void *pinfo,
 void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
                    uint32_t *eax, uint32_t *ebx,
                    uint32_t *ecx, uint32_t *edx);
-int cpu_x86_register(X86CPU *cpu, const char *cpu_model);
+int cpu_x86_register(X86CPU *cpu, const char *cpu_model, uint32_t apic_id);
 void cpu_clear_apic_feature(CPUX86State *env);
 void host_cpuid(uint32_t function, uint32_t count,
                 uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx);
diff --git a/target-i386/helper.c b/target-i386/helper.c
index 1d39ba9..70a9f72 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -1249,7 +1249,7 @@ X86CPU *cpu_x86_init(const char *cpu_model)
     env = &cpu->env;
     env->cpu_model_str = cpu_model;
 
-    if (cpu_x86_register(cpu, cpu_model) < 0) {
+    if (cpu_x86_register(cpu, cpu_model, env->cpu_index) < 0) {
         object_delete(OBJECT(cpu));
         return NULL;
     }
