Patchwork [RFC,10/18] target-i386: cpu: add apic_id argument to cpu_x86_register()

login
register
mail settings
Submitter Eduardo Habkost
Date Oct. 3, 2012, 1:29 p.m.
Message ID <1349270954-4657-11-git-send-email-ehabkost@redhat.com>
Download mbox | patch
Permalink /patch/188781/
State New
Headers show

Comments

Eduardo Habkost - Oct. 3, 2012, 1:29 p.m.
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(-)

Patch

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;
     }