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: Stefan Berger
Subject: Re: [Qemu-devel] [PATCH] acpi: switch to a dummy SSDT
Date: Wed, 10 Jan 2018 13:19:57 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

On 01/10/2018 06:29 AM, Michael S. Tsirkin wrote:
On Wed, Jan 10, 2018 at 12:25:34PM +0100, Igor Mammedov wrote:
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?
Yes but not me - Stefan (Cc'd) wants to add a custom table.

With the virtual device at a well known address I don't need the custom table anymore...

   Stefan

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]