Am 04.03.2015 um 03:13 schrieb Eduardo Habkost: > The APIC ID compatibility code is required only for PC, and now that > x86_cpu_initfn() doesn't use x86_cpu_apic_id_from_index() anymore, that > code can be moved to pc.c. > > Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> > Reviewed-by: Andreas Färber <afaer...@suse.de> > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > --- > hw/i386/pc.c | 35 +++++++++++++++++++++++++++++++++++ > target-i386/cpu.c | 34 ---------------------------------- > 2 files changed, 35 insertions(+), 34 deletions(-) > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index b229856..8c3c470 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -25,6 +25,8 @@ > #include "hw/i386/pc.h" > #include "hw/char/serial.h" > #include "hw/i386/apic.h" > +#include "hw/i386/topology.h" > +#include "sysemu/cpus.h" > #include "hw/block/fdc.h" > #include "hw/ide.h" > #include "hw/pci/pci.h" > @@ -629,6 +631,39 @@ bool e820_get_entry(int idx, uint32_t type, uint64_t > *address, uint64_t *length) > return false; > } > > +/* Enables contiguous-apic-ID mode, for compatibility */ > +static bool compat_apic_id_mode; > + > +void enable_compat_apic_id_mode(void) > +{ > + compat_apic_id_mode = true; > +} > + > +/* Calculates initial APIC ID for a specific CPU index > + * > + * Currently we need to be able to calculate the APIC ID from the CPU index > + * alone (without requiring a CPU object), as the QEMU<->Seabios interfaces > have > + * no concept of "CPU index", and the NUMA tables on fw_cfg need the APIC ID > of > + * all CPUs up to max_cpus. > + */ > +uint32_t x86_cpu_apic_id_from_index(unsigned int cpu_index)
Looking a bit closer here, as I am poking around its call site for the socket modeling, can't this be made static while at it? (If so, don't forget to drop the prototype.) Regards, Andreas > +{ > + uint32_t correct_id; > + static bool warned; > + > + correct_id = x86_apicid_from_cpu_idx(smp_cores, smp_threads, cpu_index); > + if (compat_apic_id_mode) { > + if (cpu_index != correct_id && !warned) { > + error_report("APIC IDs set in compatibility mode, " > + "CPU topology won't match the configuration"); > + warned = true; > + } > + return cpu_index; > + } else { > + return correct_id; > + } > +} > + > /* Calculates the limit to CPU APIC ID values > * > * This function returns the limit for the APIC ID value, so that all [snip] -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton; HRB 21284 (AG Nürnberg)