From 3a31f36a07d8d6bf49a7da24c5570153de0fd79e Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Thu, 25 Jun 2009 08:23:39 +0200 Subject: [PATCH] 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 Signed-off-by: Anthony Liguori --- hw/pc.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index 9da07e41eb..f02a2b5799 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -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();