@@ -435,6 +435,11 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
method = aml_method(CPU_NOTIFY_METHOD, 2, AML_NOTSERIALIZED);
for (i = 0; i < arch_ids->len; i++) {
+ if (arch_ids->cpus[i].mirror_vcpu) {
+ /* don't build objects for mirror vCPUs */
+ continue;
+ }
+
Aml *cpu = aml_name(CPU_NAME_FMT, i);
Aml *uid = aml_arg(0);
Aml *event = aml_arg(1);
@@ -650,6 +655,11 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
/* build Processor object for each processor */
for (i = 0; i < arch_ids->len; i++) {
+ if (arch_ids->cpus[i].mirror_vcpu) {
+ /* don't build objects for mirror vCPUs */
+ continue;
+ }
+
Aml *dev;
Aml *uid = aml_int(i);
GArray *madt_buf = g_array_new(0, 1, 1);
@@ -1928,6 +1928,11 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
srat->reserved1 = cpu_to_le32(1);
for (i = 0; i < apic_ids->len; i++) {
+ if (apic_ids->cpus[i].mirror_vcpu) {
+ /* don't build objects for mirror vCPUs */
+ continue;
+ }
+
int node_id = apic_ids->cpus[i].props.node_id;
uint32_t apic_id = apic_ids->cpus[i].arch_id;
@@ -91,6 +91,11 @@ void acpi_build_madt(GArray *table_data, BIOSLinker *linker,
madt->flags = cpu_to_le32(1);
for (i = 0; i < apic_ids->len; i++) {
+ if (apic_ids->cpus[i].mirror_vcpu) {
+ /* don't build objects for mirror vCPUs */
+ continue;
+ }
+
adevc->madt_cpu(adev, i, apic_ids, table_data);
if (apic_ids->cpus[i].arch_id > 254) {
x2apic_mode = true;