qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 5/8] acpi: Align the size to 128k


From: Michael S. Tsirkin
Subject: Re: [PATCH v6 5/8] acpi: Align the size to 128k
Date: Mon, 4 May 2020 10:03:29 -0400

On Wed, Apr 08, 2020 at 08:58:13PM +0800, Yubo Miao wrote:
> From: miaoyubo <address@hidden>
> 
> If table size is changed between virt_acpi_build and
> virt_acpi_build_update, the table size would not be updated to
> UEFI, therefore, just align the size to 128kb, which is enough
> and same with x86. It would warn if 64k is not enough and the
> align size should be updated.
> 
> Signed-off-by: miaoyubo <address@hidden>

does this affect migration in any way?

> ---
>  hw/arm/virt-acpi-build.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index 7bcd04dfb7..89bb768b0c 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -54,6 +54,8 @@
>  #include "hw/pci/pci_bridge.h"
>  #define ARM_SPI_BASE 32
>  
> +#define ACPI_BUILD_TABLE_SIZE             0x20000
> +
>  static void acpi_dsdt_add_cpus(Aml *scope, int smp_cpus)
>  {
>      uint16_t i;
> @@ -883,6 +885,15 @@ struct AcpiBuildState {
>      bool patched;
>  } AcpiBuildState;
>  
> +static void acpi_align_size(GArray *blob, unsigned align)
> +{
> +    /*
> +     * Align size to multiple of given size. This reduces the chance
> +     * we need to change size in the future (breaking cross version 
> migration).
> +     */
> +    g_array_set_size(blob, ROUND_UP(acpi_data_len(blob), align));
> +}
> +
>  static
>  void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
>  {
> @@ -953,6 +964,20 @@ void virt_acpi_build(VirtMachineState *vms, 
> AcpiBuildTables *tables)
>          build_rsdp(tables->rsdp, tables->linker, &rsdp_data);
>      }
>  
> +    /*
> +     * The align size is 128, warn if 64k is not enough therefore
> +     * the align size could be resized.
> +     */
> +    if (tables_blob->len > ACPI_BUILD_TABLE_SIZE / 2) {
> +        warn_report("ACPI table size %u exceeds %d bytes,"
> +                    " migration may not work",
> +                    tables_blob->len, ACPI_BUILD_TABLE_SIZE / 2);
> +        error_printf("Try removing CPUs, NUMA nodes, memory slots"
> +                     " or PCI bridges.");
> +    }
> +    acpi_align_size(tables_blob, ACPI_BUILD_TABLE_SIZE);
> +
> +
>      /* Cleanup memory that's no longer used. */
>      g_array_free(table_offsets, true);
>  }
> -- 
> 2.19.1
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]