@@ -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);
@@ -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);
@@ -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;
}
It's not up to the CPU object to decide its APIC ID, but to the CPU object creator (that knows about the CPU sockets, cores, and threads topology). This keeps the current APIC ID == CPU index behavior, by now. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- target-i386/cpu.c | 4 ++-- target-i386/cpu.h | 2 +- target-i386/helper.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)