Message ID | 1425435224-2630-5-git-send-email-ehabkost@redhat.com |
---|---|
State | New |
Headers | show |
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 <pbonzini@redhat.com> > Reviewed-by: Andreas Färber <afaerber@suse.de> > Signed-off-by: Eduardo Habkost <ehabkost@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]
On Thu, Mar 05, 2015 at 01:32:02AM +0100, Andreas Färber wrote: > 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 <pbonzini@redhat.com> > > Reviewed-by: Andreas Färber <afaerber@suse.de> > > Signed-off-by: Eduardo Habkost <ehabkost@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.) Yes, I'll make it static. I assume it's OK to do it before committing instead of resending the series because of that?
Am 05.03.2015 um 14:37 schrieb Eduardo Habkost: > On Thu, Mar 05, 2015 at 01:32:02AM +0100, Andreas Färber wrote: >> 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 <pbonzini@redhat.com> >>> Reviewed-by: Andreas Färber <afaerber@suse.de> >>> Signed-off-by: Eduardo Habkost <ehabkost@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 [...] >>> @@ -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.) > > Yes, I'll make it static. I assume it's OK to do it before committing > instead of resending the series because of that? For me, sure. If you want to go safe or be verbose, you can post the diff as a reply when you apply. Cheers, Andreas
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) +{ + 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 diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 1fb1df4..49a5e58 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -25,7 +25,6 @@ #include "sysemu/kvm.h" #include "sysemu/cpus.h" #include "kvm_i386.h" -#include "hw/i386/topology.h" #include "qemu/option.h" #include "qemu/config-file.h" @@ -2844,39 +2843,6 @@ out: } } -/* 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) -{ - 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; - } -} - static void x86_cpu_initfn(Object *obj) { CPUState *cs = CPU(obj);