x86: Clean up CPU reset

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
Jan Kiszka 2010-06-23 08:20:54 +02:00 committed by Blue Swirl
parent 052be86bc3
commit 427bd8d694

22
hw/pc.c
View File

@ -810,20 +810,12 @@ void pc_acpi_smi_interrupt(void *opaque, int irq, int level)
} }
} }
static void bsp_cpu_reset(void *opaque) static void pc_cpu_reset(void *opaque)
{ {
CPUState *env = opaque; CPUState *env = opaque;
cpu_reset(env); cpu_reset(env);
env->halted = 0; env->halted = !cpu_is_bsp(env);
}
static void ap_cpu_reset(void *opaque)
{
CPUState *env = opaque;
cpu_reset(env);
env->halted = 1;
} }
static CPUState *pc_new_cpu(const char *cpu_model) static CPUState *pc_new_cpu(const char *cpu_model)
@ -837,16 +829,10 @@ static CPUState *pc_new_cpu(const char *cpu_model)
} }
if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) { if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
env->cpuid_apic_id = env->cpu_index; env->cpuid_apic_id = env->cpu_index;
/* APIC reset callback resets cpu */
env->apic_state = apic_init(env, env->cpuid_apic_id); env->apic_state = apic_init(env, env->cpuid_apic_id);
} }
if (cpu_is_bsp(env)) { qemu_register_reset(pc_cpu_reset, env);
qemu_register_reset(bsp_cpu_reset, env); pc_cpu_reset(env);
env->halted = 0;
} else {
qemu_register_reset(ap_cpu_reset, env);
env->halted = 1;
}
return env; return env;
} }