NVDIMM SSDT table references a name ("MEMA") before
it is defined. This is reported to no longer be supported
since Linux 4.17-rc1.

While arguably Linux needs to keep working on old hypervisors, and other
OSes seem fine with our behaviour, it seems cleaner to have the
definition appear in the SSDT before use.

Suggested-by: "Schmauss, Erik" <erik.schma...@intel.com>
Cc: qemu-sta...@nongnu.org
Signed-off-by: Michael S. Tsirkin <m...@redhat.com>
---

Hi Erik,
could you pls test the issue and report whether it addresses
your concern? I can't do much to fix past releases which IIUC
shipped this code since 2.6.0 about a year ago.

Lightly tested with Linux only.

 hw/acpi/nvdimm.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c
index 59d6e42..fadebbd 100644
--- a/hw/acpi/nvdimm.c
+++ b/hw/acpi/nvdimm.c
@@ -1234,6 +1234,10 @@ static void nvdimm_build_ssdt(GArray *table_offsets, 
GArray *table_data,
     ssdt = init_aml_allocator();
     acpi_data_push(ssdt->buf, sizeof(AcpiTableHeader));
 
+    /* Storage for the memory address */
+    mem_addr_offset = table_data->len +
+        build_append_named_dword(ssdt->buf, NVDIMM_ACPI_MEM_ADDR);
+
     sb_scope = aml_scope("\\_SB");
 
     dev = aml_device("NVDR");
@@ -1266,8 +1270,6 @@ static void nvdimm_build_ssdt(GArray *table_offsets, 
GArray *table_data,
 
     /* copy AML table into ACPI tables blob and patch header there */
     g_array_append_vals(table_data, ssdt->buf->data, ssdt->buf->len);
-    mem_addr_offset = build_append_named_dword(table_data,
-                                               NVDIMM_ACPI_MEM_ADDR);
 
     bios_linker_loader_alloc(linker,
                              NVDIMM_DSM_MEM_FILE, dsm_dma_arrea,
-- 
MST

Reply via email to