If we start Windows 2008 R2 DataCenter with number of cpu less than 8,
The system will use APIC Flat Logical destination mode as default configuration,
Which has an upper limit of 8 CPUs.
The fault is that VM can not show all processors within Task Manager if
we hot-add cpus when the number of cpus in VM extends the limit of 8.
If we use cluster destination model, the problem will be solved.
Signed-off-by: huangzhichao<address@hidden>
Signed-off-by: zhanghailiang<address@hidden>
---
v2:
- Set this bit when max_cpus> 8
---
hw/i386/acpi-build.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 85e5834..cdc3b08 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -550,6 +550,12 @@ static void fadt_setup(AcpiFadtDescriptorRev1 *fadt,
AcpiPmInfo *pm)
(1<< ACPI_FADT_F_SLP_BUTTON) |
(1<< ACPI_FADT_F_RTC_S4));
fadt->flags |= cpu_to_le32(1<< ACPI_FADT_F_USE_PLATFORM_CLOCK);
+ /* APIC destination mode ("Flat Logical") has an upper limit of 8 CPUs
+ * For more than 8 CPUs, "Clustered Logical" mode has to be used
+ */
+ if (max_cpus> 8) {
+ fadt->flags |= cpu_to_le32(1<< ACPI_FADT_F_FORCE_APIC_CLUSTER_MODEL);
+ }
}