Gleb Natapov wrote: > Anybody knows why it currently does? > > Signed-off-by: Gleb Natapov > diff --git a/hw/pc.c b/hw/pc.c > index 0934778..15c3efe 100644 > --- a/hw/pc.c > +++ b/hw/pc.c > @@ -881,11 +881,9 @@ static void pc_init1(ram_addr_t ram_size, > if (smp_cpus > 1) { > /* XXX: enable it in all cases */ > env->cpuid_features |= CPUID_APIC; > - } > - qemu_register_reset(main_cpu_reset, 0, env); > - if (pci_enabled) { > apic_init(env); > } > + qemu_register_reset(main_cpu_reset, 0, env); > } > > vmport_init(); !pci_enabled means isapc, and that was probably once defined as "shall have no external APIC". But I wonder if we should change this test into "(env->cpuid_features & CPUID_APIC) || smp_cpus > 1", ie. also include isapc with LAPIC CPU (probably a synthetic case, but a selectable one) and non-LAPIC CPU with external APIC (for SMP). I also wonder if that explicit setting of CPUID_APIC for smp_cpus > 1 is correct. Either the selected CPU type has one, then it's set via PPRO_FEATURES, or not - then it could still exist externally for SMP, see above. Does this make some sense? Jan