All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Liran Alon <liran.alon@oracle.com>
Cc: ehabkost@redhat.com, mst@redhat.com, qemu-devel@nongnu.org,
	Elad Gabay <elad.gabay@oracle.com>,
	pbonzini@redhat.com, rth@twiddle.net
Subject: Re: [PATCH v2 2/3] acpi: Add Windows ACPI Emulated Device Table (WAET)
Date: Mon, 16 Mar 2020 11:28:51 +0100	[thread overview]
Message-ID: <20200316112851.2364eb46@redhat.com> (raw)
In-Reply-To: <20200313145009.144820-3-liran.alon@oracle.com>

On Fri, 13 Mar 2020 16:50:08 +0200
Liran Alon <liran.alon@oracle.com> wrote:

> Microsoft introduced this ACPI table to avoid Windows guests performing
> various workarounds for device erratas. As the virtual device emulated
> by VMM may not have the errata.
> 
> Currently, WAET allows hypervisor to inform guest about two
> specific behaviors: One for RTC and the other for ACPI PM timer.
> 
> Support for WAET have been introduced since Windows Vista. This ACPI
> table is also exposed by other common hypervisors by default, including:
> VMware, GCP and AWS.
> 
> This patch adds WAET ACPI Table to QEMU.
> 
> We set "ACPI PM timer good" bit in "Emualted Device Flags" field to
> indicate that the ACPI PM timer has been enhanced to not require
> multiple reads to obtain a reliable value.
> This results in improving the performance of Windows guests that use
> ACPI PM timer by avoiding unnecessary VMExits caused by these multiple
> reads.
> 
> Co-developed-by: Elad Gabay <elad.gabay@oracle.com>
> Signed-off-by: Liran Alon <liran.alon@oracle.com>

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

> ---
>  hw/i386/acpi-build.c | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
> 
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 9c4e46fa7466..1c3a2e8fcb3c 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2512,6 +2512,34 @@ build_dmar_q35(GArray *table_data, BIOSLinker *linker)
>      build_header(linker, table_data, (void *)(table_data->data + dmar_start),
>                   "DMAR", table_data->len - dmar_start, 1, NULL, NULL);
>  }
> +
> +/*
> + * Windows ACPI Emulated Devices Table
> + * (Version 1.0 - April 6, 2009)
> + * Spec: http://download.microsoft.com/download/7/E/7/7E7662CF-CBEA-470B-A97E-CE7CE0D98DC2/WAET.docx
> + *
> + * Helpful to speedup Windows guests and ignored by others.
> + */
> +static void
> +build_waet(GArray *table_data, BIOSLinker *linker)
> +{
> +    int waet_start = table_data->len;
> +
> +    /* WAET header */
> +    acpi_data_push(table_data, sizeof(AcpiTableHeader));
> +    /*
> +     * Set "ACPI PM timer good" flag.
> +     *
> +     * Tells Windows guests that our ACPI PM timer is reliable in the
> +     * sense that guest can read it only once to obtain a reliable value.
> +     * Which avoids costly VMExits caused by guest re-reading it unnecessarily.
> +     */
> +    build_append_int_noprefix(table_data, 1 << 1 /* ACPI PM timer good */, 4);
this should work but, I'd use (1UL << 1) if you'll need to respin


> +
> +    build_header(linker, table_data, (void *)(table_data->data + waet_start),
> +                 "WAET", table_data->len - waet_start, 1, NULL, NULL);
> +}
> +
>  /*
>   *   IVRS table as specified in AMD IOMMU Specification v2.62, Section 5.2
>   *   accessible here http://support.amd.com/TechDocs/48882_IOMMU.pdf
> @@ -2859,6 +2887,9 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
>                            machine->nvdimms_state, machine->ram_slots);
>      }
>  
> +    acpi_add_table(table_offsets, tables_blob);
> +    build_waet(tables_blob, tables->linker);
> +
>      /* Add tables supplied by user (if any) */
>      for (u = acpi_table_first(); u; u = acpi_table_next(u)) {
>          unsigned len = acpi_table_len(u);



  reply	other threads:[~2020-03-16 11:08 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-13 14:50 [PATCH v2 0/3]: acpi: Add Windows ACPI Emulated Device Table (WAET) Liran Alon
2020-03-13 14:50 ` [PATCH v2 1/3] acpi: unit-test: Ignore diff in WAET ACPI table Liran Alon
2020-03-13 14:50 ` [PATCH v2 2/3] acpi: Add Windows ACPI Emulated Device Table (WAET) Liran Alon
2020-03-16 10:28   ` Igor Mammedov [this message]
2020-03-27 15:14     ` Liran Alon
2020-03-29 11:29       ` Michael S. Tsirkin
2020-03-13 14:50 ` [PATCH v2 3/3] acpi: unit-test: Update WAET ACPI Table expected binaries Liran Alon
2020-03-13 15:58 ` [PATCH v2 0/3]: acpi: Add Windows ACPI Emulated Device Table (WAET) no-reply
2020-03-13 16:22   ` Liran Alon
2020-03-14 18:27   ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200316112851.2364eb46@redhat.com \
    --to=imammedo@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=elad.gabay@oracle.com \
    --cc=liran.alon@oracle.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.