qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] acpi: switch to a dummy SSDT


From: Igor Mammedov
Subject: Re: [Qemu-devel] [PATCH] acpi: switch to a dummy SSDT
Date: Wed, 10 Jan 2018 12:25:34 +0100

On Tue, 9 Jan 2018 15:58:11 +0200
"Michael S. Tsirkin" <address@hidden> wrote:

> We prefer not changing table sizes depending on parameters,
> that's why we create a dummy table rather than just drop
> the MCFG table.
> 
> However, a table named "QEMU" could be put to a better
> use than just a stub, e.g. we could use it to pass
> some QEMU specific info to guests.
> 
> Replace with an SSDT and pad with the Nop opcode
> to preserve the length.
Not sure it's useful, do you have patches on top of that, which will use this?


> Signed-off-by: Michael S. Tsirkin <address@hidden>
> ---
>  hw/i386/acpi-build.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 73519ab..d0afb31e 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2419,6 +2419,8 @@ build_mcfg_q35(GArray *table_data, BIOSLinker *linker, 
> AcpiMcfgInfo *info)
>  {
>      AcpiTableMcfg *mcfg;
>      const char *sig;
> +    const char *oem;
> +    const char *oem_id;
>      int len = sizeof(*mcfg) + 1 * sizeof(mcfg->allocation[0]);
>  
>      mcfg = acpi_data_push(table_data, len);
> @@ -2431,16 +2433,21 @@ build_mcfg_q35(GArray *table_data, BIOSLinker 
> *linker, AcpiMcfgInfo *info)
>      /* MCFG is used for ECAM which can be enabled or disabled by guest.
>       * To avoid table size changes (which create migration issues),
>       * always create the table even if there are no allocations,
> -     * but set the signature to a reserved value in this case.
> -     * ACPI spec requires OSPMs to ignore such tables.
> +     * but fill it with Noop values.
> +     * OSPMs ignore such tables.
>       */
>      if (info->mcfg_base == PCIE_BASE_ADDR_UNMAPPED) {
> -        /* Reserved signature: ignored by OSPM */
> -        sig = "QEMU";
> +        sig = "SSDT";
> +        oem = "QEMU ";
> +        oem_id = "NOOP";
> +        /* 0xa3 - NoopOp */
> +        memset(&mcfg->reserved, 0xa3, len - offsetof(AcpiTableMcfg, 
> reserved));
>      } else {
>          sig = "MCFG";
> +        oem = NULL;
> +        oem_id = NULL;
>      }
> -    build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL, NULL);
> +    build_header(linker, table_data, (void *)mcfg, sig, len, 1, oem, oem_id);
>  }
>  
>  /*




reply via email to

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