From: Tobin Feldman-Fitzthum <tobin@linux.ibm.com>
By excluding mirror vcpus from the ACPI tables, we hide them from the
guest OS.
Signed-off-by: Tobin Feldman-Fitzthum <tobin@linux.ibm.com>
Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
Co-developed-by: Ashish Kalra <ashish.kalra@amd.com>
Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
---
hw/acpi/cpu.c | 10 ++++++++++
hw/i386/acpi-build.c | 5 +++++
hw/i386/acpi-common.c | 5 +++++
3 files changed, 20 insertions(+)
diff --git a/hw/acpi/cpu.c b/hw/acpi/cpu.c
index f82e9512fd..8ac2fd018e 100644
--- a/hw/acpi/cpu.c
+++ b/hw/acpi/cpu.c
@@ -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);
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index a33ac8b91e..3c0a8b47ef 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -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;
diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c
index 1f5947fcf9..80aefbc920 100644
--- a/hw/i386/acpi-common.c
+++ b/hw/i386/acpi-common.c
@@ -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;
--
2.17.1