diff mbox

[V2] acpi-build: Set FORCE_APIC_CLUSTER_MODEL bit for FADT flags

Message ID 1409284371-7396-1-git-send-email-zhang.zhanghailiang@huawei.com
State New
Headers show

Commit Message

Zhanghailiang Aug. 29, 2014, 3:52 a.m. UTC
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 <huangzhichao@huawei.com>
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
---
v2:
 - Set this bit when max_cpus > 8
---
 hw/i386/acpi-build.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Zhanghailiang Sept. 3, 2014, 12:55 a.m. UTC | #1
Hi,

Ping...

Thanks,
zhanghailiang

On 2014/8/29 11:52, zhanghailiang wrote:
> 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<huangzhichao@huawei.com>
> Signed-off-by: zhanghailiang<zhang.zhanghailiang@huawei.com>
> ---
> 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);
> +    }
>   }
>
>
Igor Mammedov Sept. 3, 2014, 1:01 p.m. UTC | #2
On Fri, 29 Aug 2014 11:52:51 +0800
zhanghailiang <zhang.zhanghailiang@huawei.com> wrote:

> 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 <huangzhichao@huawei.com>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> ---
> 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);
> +    }
This flag was introduced later than ACPI v1.0 specification while QEMU generates
v1.0 tables only, but...

linux kernel ignores this flag, so patch has no influence on it.

Tested with Win[XPsp3|Srv2003EE|Srv2008DC|Srv2008R2|Srv2012R2], there isn't BSODs
and guests boot just fine. In cases guest doesn't support cpu-hotplug, cpu becomes
visible after reboot and in case the guest supports cpu-hotplug, it works
as expected with this patch.

It seems reasonable to apply this hack for extending cpu-hotplug usability
with Windows guests, hence:

Reviewed-By: Igor Mammedov <imammedo@redhat.com>

>  }
>  
>
diff mbox

Patch

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);
+    }
 }