xen/x86/pvh: handle ACPI RSDT table in PVH Dom0 build

Xen always generates an XSDT table even if the firmware only provided an
RSDT table.  Copy the RSDT header from the firmware table, adjusting the
signature, for the XSDT table when not provided by the firmware.

This is necessary to run Xen on QEMU.

Fixes: 1d74282c45 ('x86: setup PVHv2 Dom0 ACPI tables')
Suggested-by: Roger Pau Monné <roger.pau@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
This commit is contained in:
Stefano Stabellini authored and Jan Beulich committed 2024-09-12 09:18:25 +02:00
1 parent 40f5c7e138
commit 6e7f7a0c16
1 file changed
+15
+15
View File
@@ -1078,7 +1078,16 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr,
rc = -EINVAL;
goto out;
}
/*
* Note the header is the same for both RSDT and XSDT, so it's fine to
* copy the native RSDT header to the Xen crafted XSDT if no native
* XSDT is available.
*/
if ( rsdp->revision > 1 && rsdp->xsdt_physical_address )
xsdt_paddr = rsdp->xsdt_physical_address;
else
xsdt_paddr = rsdp->rsdt_physical_address;
acpi_os_unmap_memory(rsdp, sizeof(*rsdp));
table = acpi_os_map_memory(xsdt_paddr, sizeof(*table));
if ( !table )
@@ -1090,6 +1099,12 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr,
xsdt->header = *table;
acpi_os_unmap_memory(table, sizeof(*table));
/*
* In case the header is an RSDT copy, unconditionally ensure it has
* an XSDT sig.
*/
xsdt->header.signature[0] = 'X';
/* Add the custom MADT. */
xsdt->table_offset_entry[0] = madt_addr;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.