diff options
author | Jan Kiszka <jan.kiszka@web.de> | 2009-06-25 08:23:39 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-06-29 14:18:08 -0500 |
commit | 3a31f36a07d8d6bf49a7da24c5570153de0fd79e (patch) | |
tree | b6062fba17026268b4c37730de159bc7478432c4 /hw/pc.c | |
parent | 15dfcd454cb99fd8c65b6ecda24acd9dabd570a7 (diff) |
x86: Factor out pc_new_cpu
At this point, this refactoring looks like overkill. But we will need it
for CPU hotplugging, and qemu-kvm already carries it. Merging it early
would help qemu-kvm when rebasing against upstream.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/pc.c')
-rw-r--r-- | hw/pc.c | 36 |
1 files changed, 22 insertions, 14 deletions
@@ -1062,6 +1062,25 @@ int cpu_is_bsp(CPUState *env) return env->cpuid_apic_id == 0; } +static CPUState *pc_new_cpu(const char *cpu_model) +{ + CPUState *env; + + env = cpu_init(cpu_model); + if (!env) { + fprintf(stderr, "Unable to find x86 CPU definition\n"); + exit(1); + } + if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) { + env->cpuid_apic_id = env->cpu_index; + /* APIC reset callback resets cpu */ + apic_init(env); + } else { + qemu_register_reset((QEMUResetHandler*)cpu_reset, env); + } + return env; +} + /* PC hardware initialisation */ static void pc_init1(ram_addr_t ram_size, const char *boot_device, @@ -1103,20 +1122,9 @@ static void pc_init1(ram_addr_t ram_size, cpu_model = "qemu32"; #endif } - - for(i = 0; i < smp_cpus; i++) { - env = cpu_init(cpu_model); - if (!env) { - fprintf(stderr, "Unable to find x86 CPU definition\n"); - exit(1); - } - if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) { - env->cpuid_apic_id = env->cpu_index; - /* APIC reset callback resets cpu */ - apic_init(env); - } else { - qemu_register_reset((QEMUResetHandler*)cpu_reset, env); - } + + for (i = 0; i < smp_cpus; i++) { + env = pc_new_cpu(cpu_model); } vmport_init(); |