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