mirror of https://github.com/xemu-project/xemu.git
pc: move pcms->possible_cpus init out of pc_cpus_init()
possible_cpus could be initialized earlier then cpu objects, i.e. when -smp is parsed so move init code to possible_cpu_arch_ids() interface func and do initialization on the first call. it should help later with making -numa cpu/-smp parsing a machine state properties. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
38690a1ca7
commit
c96a1c0ba6
35
hw/i386/pc.c
35
hw/i386/pc.c
|
@ -1144,7 +1144,9 @@ void pc_cpus_init(PCMachineState *pcms)
|
||||||
ObjectClass *oc;
|
ObjectClass *oc;
|
||||||
const char *typename;
|
const char *typename;
|
||||||
gchar **model_pieces;
|
gchar **model_pieces;
|
||||||
|
const CPUArchIdList *possible_cpus;
|
||||||
MachineState *machine = MACHINE(pcms);
|
MachineState *machine = MACHINE(pcms);
|
||||||
|
MachineClass *mc = MACHINE_GET_CLASS(pcms);
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
if (machine->cpu_model == NULL) {
|
if (machine->cpu_model == NULL) {
|
||||||
|
@ -1179,14 +1181,9 @@ void pc_cpus_init(PCMachineState *pcms)
|
||||||
* This is used for FW_CFG_MAX_CPUS. See comments on bochs_bios_init().
|
* This is used for FW_CFG_MAX_CPUS. See comments on bochs_bios_init().
|
||||||
*/
|
*/
|
||||||
pcms->apic_id_limit = x86_cpu_apic_id_from_index(max_cpus - 1) + 1;
|
pcms->apic_id_limit = x86_cpu_apic_id_from_index(max_cpus - 1) + 1;
|
||||||
machine->possible_cpus = g_malloc0(sizeof(CPUArchIdList) +
|
possible_cpus = mc->possible_cpu_arch_ids(machine);
|
||||||
sizeof(CPUArchId) * max_cpus);
|
for (i = 0; i < smp_cpus; i++) {
|
||||||
for (i = 0; i < max_cpus; i++) {
|
pc_new_cpu(typename, possible_cpus->cpus[i].arch_id, &error_fatal);
|
||||||
machine->possible_cpus->cpus[i].arch_id = x86_cpu_apic_id_from_index(i);
|
|
||||||
machine->possible_cpus->len++;
|
|
||||||
if (i < smp_cpus) {
|
|
||||||
pc_new_cpu(typename, x86_cpu_apic_id_from_index(i), &error_fatal);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2254,10 +2251,26 @@ static unsigned pc_cpu_index_to_socket_id(unsigned cpu_index)
|
||||||
return topo.pkg_id;
|
return topo.pkg_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const CPUArchIdList *pc_possible_cpu_arch_ids(MachineState *machine)
|
static const CPUArchIdList *pc_possible_cpu_arch_ids(MachineState *ms)
|
||||||
{
|
{
|
||||||
assert(machine->possible_cpus);
|
int i;
|
||||||
return machine->possible_cpus;
|
|
||||||
|
if (ms->possible_cpus) {
|
||||||
|
/*
|
||||||
|
* make sure that max_cpus hasn't changed since the first use, i.e.
|
||||||
|
* -smp hasn't been parsed after it
|
||||||
|
*/
|
||||||
|
assert(ms->possible_cpus->len == max_cpus);
|
||||||
|
return ms->possible_cpus;
|
||||||
|
}
|
||||||
|
|
||||||
|
ms->possible_cpus = g_malloc0(sizeof(CPUArchIdList) +
|
||||||
|
sizeof(CPUArchId) * max_cpus);
|
||||||
|
ms->possible_cpus->len = max_cpus;
|
||||||
|
for (i = 0; i < ms->possible_cpus->len; i++) {
|
||||||
|
ms->possible_cpus->cpus[i].arch_id = x86_cpu_apic_id_from_index(i);
|
||||||
|
}
|
||||||
|
return ms->possible_cpus;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HotpluggableCPUList *pc_query_hotpluggable_cpus(MachineState *machine)
|
static HotpluggableCPUList *pc_query_hotpluggable_cpus(MachineState *machine)
|
||||||
|
|
Loading…
Reference in New Issue