mirror of https://github.com/xemu-project/xemu.git
pc: Refuse max_cpus if it results in too large APIC ID
This changes the PC initialization code to reject max_cpus if it results in an APIC ID that's too large, instead of aborting or erroring out when it is already too late. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
798325ed38
commit
f03bd716a2
|
@ -992,6 +992,7 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge)
|
||||||
int i;
|
int i;
|
||||||
X86CPU *cpu = NULL;
|
X86CPU *cpu = NULL;
|
||||||
Error *error = NULL;
|
Error *error = NULL;
|
||||||
|
unsigned long apic_id_limit;
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
if (cpu_model == NULL) {
|
if (cpu_model == NULL) {
|
||||||
|
@ -1003,6 +1004,13 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge)
|
||||||
}
|
}
|
||||||
current_cpu_model = cpu_model;
|
current_cpu_model = cpu_model;
|
||||||
|
|
||||||
|
apic_id_limit = pc_apic_id_limit(max_cpus);
|
||||||
|
if (apic_id_limit > ACPI_CPU_HOTPLUG_ID_LIMIT) {
|
||||||
|
error_report("max_cpus is too large. APIC ID of last CPU is %lu",
|
||||||
|
apic_id_limit - 1);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < smp_cpus; i++) {
|
for (i = 0; i < smp_cpus; i++) {
|
||||||
cpu = pc_new_cpu(cpu_model, x86_cpu_apic_id_from_index(i),
|
cpu = pc_new_cpu(cpu_model, x86_cpu_apic_id_from_index(i),
|
||||||
icc_bridge, &error);
|
icc_bridge, &error);
|
||||||
|
|
Loading…
Reference in New Issue